I am using react-quill, and it’s requirement is that modules prop must be cached and shouldn’t change. I am using useMemo hook to memoize it. The object is:
const modules = useMemo(() => ({
key: {
value: {
handler: handlerFunc
}
}), [])
and it’s used like:
<Quill
modules={modules}
value={value}
onChange={onChange}
// value and onChange are props
/>
handleFunc in modules object, just console logs value prop. The issue is that value is not latest, it’s the first value. I tried same thing in class component and I was able to get the value and it works perfectly fine, but unfortunately it doesn’t work with useMemo. Please note, I can’t just put [value] in second argument of useMemo as modules shouldn’t be changed.
Class component implementation:
class MyComponent extends React.Component {
constructor() {
super()
this.handlerFunc = this.handlerFunc.bind(this)
this.modules = this.initModules(this.handlerFunc)
}
initModules(handlerFunc) {
return {
key: {
value: {
handler: handlerFunc,
},
},
}
}
handlerFunc() {
console.log(this.props.value)
}
}
But I can’t use class-component as it’s a requirement to use functional-components only. Is there any way, I can have latest value in useMemo, or yet any other solution?
Advertisement
Answer
Why you are not assigning a ref to the editor and getting the value from it, instead of having it from value prop?
const editor = this.reactQuillRef.getEditor(); editor.getText(); // getText, getHTML or whatever
Here’s the link