antd cascader 的默认值如果在 useEffect 中设置不工作
antd cascader's default value if not working if set it in useEffect
如果硬编码它就可以工作:
<Cascader
defaultValue={["County"]}
className="custom_select"
expandTrigger="hover"
options={options_3}
onChange={onChange}
placeholder="Please select"
changeOnSelect
disabled={true}
/>
但是如果我在 useEffect 中使用 setDefaultValue(),它就不起作用:
const [defaultValue, setDefaultValue] = useState([]);
useEffect(()=>{
setDefaultValue(['Global'])
},[defaultValue[0]])
online demo
是bug还是我用错了?
AntD 中的 defaultValue
属性仅在第一次渲染时使用,因为 useEffect
在第一次渲染后运行,你最终没有为级联器设置默认值。之后设置它没有任何效果。如果你想使用defaultValue
,你可以确保当cascader渲染时,你已经设置了默认值。
const [defaultVal, setDefaultVal] = useState();
useEffect(() => {
setDefaultVal(['zhejiang', 'hangzhou', 'xihu']);
}, []);
return (
<div>
{defaultVal && (
<Cascader
defaultValue={defaultVal}
options={options}
onChange={onChange}
/>
)}
</div>
)
如果您希望 cascader 始终呈现,您还可以将受控组件与 value
一起使用。
如果硬编码它就可以工作:
<Cascader
defaultValue={["County"]}
className="custom_select"
expandTrigger="hover"
options={options_3}
onChange={onChange}
placeholder="Please select"
changeOnSelect
disabled={true}
/>
但是如果我在 useEffect 中使用 setDefaultValue(),它就不起作用:
const [defaultValue, setDefaultValue] = useState([]);
useEffect(()=>{
setDefaultValue(['Global'])
},[defaultValue[0]])
online demo 是bug还是我用错了?
AntD 中的 defaultValue
属性仅在第一次渲染时使用,因为 useEffect
在第一次渲染后运行,你最终没有为级联器设置默认值。之后设置它没有任何效果。如果你想使用defaultValue
,你可以确保当cascader渲染时,你已经设置了默认值。
const [defaultVal, setDefaultVal] = useState();
useEffect(() => {
setDefaultVal(['zhejiang', 'hangzhou', 'xihu']);
}, []);
return (
<div>
{defaultVal && (
<Cascader
defaultValue={defaultVal}
options={options}
onChange={onChange}
/>
)}
</div>
)
如果您希望 cascader 始终呈现,您还可以将受控组件与 value
一起使用。