【发布时间】:2022-01-21 21:49:01
【问题描述】:
我正在使用我在列表中呈现的自定义 <CompositeInput> 组件。
<div className="p-6">
{nodeProperties.map(({ key, value }) =>
CompositeInput({
value: value,
label: key,
key: key,
onChange: editing ? (x) => console.log(x) : undefined,
})
)}
<div className="flex w-full pt-2">{bottomBar}</div>
</div>
在这个列表中,我调用useState 来保存组件的输入状态:
const DataPropertyInput = (
value: DataPropertyValue,
onChange?: (newData: DataPropertyValue) => void
) => {
const [updatedValue, setValue] = useState(value);
return matchExhaustive(updatedValue, {
StringWrapper: (string) => (
<input
onChange={(ev) => {
setValue(DataPropertyValue.StringWrapper(ev.target.value));
onChange?.(DataPropertyValue.StringWrapper(ev.target.value));
}}
disabled={!onChange}
className="p-1 bg-transparent mr-2"
value={string}
/>
),
DateTimeWrapper: (strData) => <div> "datepicker"</div>,
Unknown: () => <div> Special property type </div>,
IntWrapper: (int) => <div> NUMBER INPUT </div>,
EmptyWrapper: () => <div>Empty </div>,
ManyOfMany: () => <div>Dropdown here </div>,
});
};
当我添加另一个 nodeProperty 时,调用的钩子的数量显然会发生变化。
什么是使用 React useState 的正确方法,这样它就不会抱怨?
【问题讨论】: