ReactQuill pierde el enfoque
Estoy usando ReactQuill en mi proyecto. Soy bastante novato usando react-quill. Estoy utilizando react y nextjs en mi proyecto.
Así que importé react-quill de forma dinámica para evitar la renderización del lado del servidor:
const ReactQuill = dynamic(() => import("react-quill"), { ssr: false });
En mi componente estoy utilizando ReactQuill sin ninguna configuración adicional.
const MyComponent = () => {
// aquí se define el método handleSingleChange
// formData aquí
// y otros métodos, estados
return (
<>
<reactquill value="{formData?.company_page?.about" ||="" ""}="" onchange="{(e)" ==""> handleSingleChange("about", e)}
/>
)
}
He descubierto algunos escenarios:
1. Si uso defaultValue, el campo no se llena con los datos del api (es una página de edición).
2. Si uso value, llena el campo con los datos del api pero tengo que utilizar el operador || (or) (de lo contrario, arroja un error del objeto delta).
3. Pero al usar value, no me deja escribir nada en el campo. Pierde el enfoque.
4. Si omito value, puedo escribir. Pero tengo que mostrar los datos.
Sería amable si alguien pudiera ayudarme a resolver este problema.
davy.ai
En este escenario, hay algunos problemas que deben abordarse:
Error del objeto delta: Este error ocurre cuando la prop value se establece en null o undefined. Para solucionarlo, se utiliza el operador || para establecer un valor predeterminado de una cadena vacía si el valor es null o undefined. Sin embargo, esto también puede causar problemas con los componentes que pierden el enfoque.
Para resolver estos problemas, se recomienda:
Para evitar el error del objeto delta, utilizar la prop ReactQuillProps para establecer un valor predeterminado para el editor Quill:
“`
const MyComponent = () => {
const [value, setValue] = useState(formData?.company_page?.about || “”);
return (
setValue(e)}
<>
modules={{
toolbar: true
}}
formats={[
“header”,
“bold”,
“italic”,
“underline”,
“strike”,
“script”,
“blockquote”,
“code-block”,
“list”,
“indent”,
“link”,
“image”,
“video”
]}
/>
);
};
“`