When I define a configuration obj inside a func component, wrap the obj with a useMemo that provided by React.
Ex)
import React, { useState, useMemo } from 'react';
import Form, { Label, SimpleItem } from 'devextreme-react/form';
const data = { isAddressRequired: false, Address: '' };
export default function App() {
const [visible, setVisible] = useState(false);
const checkBoxOptions = useMemo(() => {
return {
text: "Display Address",
onValueChanged: (e) => {
setVisible(e.value);
}
}
}, []);
const addressOptions = useMemo(() => {
return {
placeholder: 'Enter your addresss',
maxLength: 50
}
}, []);
return (
<Form formData={data}
width={400}>
<SimpleItem
dataField="isAddressRequired"
editorType="dxCheckBox"
editorOptions={checkBoxOptions}>
<Label visible={false} />
</SimpleItem>
<SimpleItem
dataField="Address"
editorType="dxTextBox"
editorOptions={addressOptions}
visible={visible}
/>
</Form>
);
}
이렇게 useMemo로 감싸놓으면 불필요한 렌더링 방지할 수 있음.