useEffect 删除状态然后重置?反应
useEffect removes state and then resets? React
我有一个用 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')
}
}, [])
这不起作用的最可能原因是因为您在功能组件 中使用了setState。尝试使用 useState hook 来管理状态,在您的情况下,将 heathZoneServed 数组设置为空数组。
const [healthZoneServed,sethealthZoneServed] = useState([]);
sethealthZoneServed(value);
useEffect(() => {
if (selectOptions.some((option) => option.value === state.healthZonesServed[0])) {
return;
} else {
sethealthZonesServed([]);
console.log('HIT');
}
}, [healthZonesServed]);
希望这对您有所帮助。
我有一个用 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')
}
}, [])
这不起作用的最可能原因是因为您在功能组件 中使用了setState。尝试使用 useState hook 来管理状态,在您的情况下,将 heathZoneServed 数组设置为空数组。
const [healthZoneServed,sethealthZoneServed] = useState([]);
sethealthZoneServed(value);
useEffect(() => {
if (selectOptions.some((option) => option.value === state.healthZonesServed[0])) {
return;
} else {
sethealthZonesServed([]);
console.log('HIT');
}
}, [healthZonesServed]);
希望这对您有所帮助。