我正在使用react-select
和react-final-form
用于条件下拉菜单,其中第二个选择的选项由<PickOptions/>
基于第一个选择的值的组件提供(感谢这个 SO answer)。
这是组件:
/** Changes options and clears field B when field A changes */
const PickOptions = ({ a, b, optionsMap, children }) => {
const aField = useField(a, { subscription: { value: 1 } });
const bField = useField(b, { subscription: {} });
const aValue = aField.input.value.value;
const changeB = bField.input.onChange;
const [options, setOptions] = React.useState(optionsMap[aValue]);
React.useEffect(() => {
changeB(undefined); // clear B
setOptions(optionsMap[aValue]);
}, [aValue, changeB, optionsMap]);
return children(options || []);
};
当第一个选择的值更改时,它会清除第二个选择changeB(undefined)
。我还通过传递将第二个选择设置为数组中的第一个选项initialValue
。因为我需要从状态中初始化值,所以我最终得到了以下代码:
initialValue={
this.state.data.options[index] &&
this.state.data.options[index].secondOption
? this.state.data.options[index]
.secondOption
: options.filter(
option => option.type === "option"
)[0]
}
但它不起作用。来自状态的初始值不会传递给由 呈现的字段<PickOptions/>
。如果我从组件中删除changeB(undefined)
,则传递值,但是当第一个选择的值更改时(即使选项已更新),第二个选择的输入值不会更新。这是我的代码框的链接。
我该如何解决?