Всем привет , совсем недавно познакомился с реакт паттерном "Event switch" , и написал его реализацию в моём понимании . В моём случае это обычная форма с инпутами , но при изм. текст в одном инпуте весь компонент ре-рендерится весь комп. BasicForm , хотелось бы узнать правильное ли это поведение и можно ли как нибудь это улучшить ?
export default function BasicForm({ type, fields }: IBasicFormProps) {
const [inputState, setInputState] = useState({
title: "",
description: "",
});
const handleChange = (e: any) => {
const type = e.target.name;
switch (type) {
case "title":
return setInputState({
...inputState,
[e.target.name]: e.target.value,
});
case "description":
return setInputState({
...inputState,
[e.target.name]: e.target.value,
});
default:
return console.warn(`No case for event type "${type}"`);
}
};
const renderBasicForm = (type: string): JSX.Element => {
switch (type) {
case CREATE_ITEM_FORM:
return (
<Box>
{fields.map((inputField: any, i) => {
return (
<InputItem
type={inputField.type}
placeholder={inputField.description}
value={inputState}
onChangeEvent={handleChange}
label={inputField.label}
name={inputField.name}
/>
);
})}
</Box>
);
default:
<div>There is no data to display</div>;
}
};
return <div>{renderBasicForm(type)}</div>;
}