【发布时间】:2022-01-13 16:58:32
【问题描述】:
我有一个用 React Select 制作的组件。传递到 Select 上的 options 属性的选项取决于用户之前输入的状态。每次组件渲染时,都会检查 selectOptions 是否已经包含状态数组中的项目
<Select
styles={err === '' ? inputStyles : inputStylesErr}
className="basic-single"
classNamePrefix="select"
isClearable={true}
isSearchable={true}
isMulti={true}
placeholder={`Select or search health zones in ${province}, ${state.address.country}`}
options={selectOptions}
defaultValue={selectOptions.some((option) => option.value === state.healthZonesServed[0]) ? (
state.healthZonesServed.map((zone) => {
return { ['label']: zone, ['value']: zone }
})
) : ''}
onChange={(values) => handleAddHealthZones(values.map((value) => value.value))}
/>
const handleAddHealthZones = (value) => {
setState({
...state,
healthZonesServed: value
})
}
如果用户填充了他们的 healthZonesServed 数组,然后返回并更改了他们的省份(控制 selectOptions 的状态),然后返回到该组件,我需要将 healthZonesServed 数组重置为 []
我在 useEffect 中执行此操作。我可以在我的 console.log 中看到 healthZonesServed 在页面加载时重置为一个空数组,然后以某种方式从某个地方重新填充其先前的值。有没有人知道为什么会发生这种情况以及可能的解决方案?
useEffect(() => {
if (selectOptions.some((option) => option.value === state.healthZonesServed[0])) {
return
} else {
setState({
...state,
healthZonesServed: []
})
console.log('HIT')
}
}, [])
【问题讨论】:
标签: reactjs use-effect react-select