我有一个简单的函数组件,希望根据条件用布尔值初始化状态。例如:
export default() => {
const st = useSelector(state => state.body);
const { type } = st;
let bool = type === 'test'
const [ hidden, setHidden ] = useState(bool) //this is always true
}
st
只是从redux中获取状态,type
将是条件。在某些情况下,type
将被测试,因此bool
将为true,但当它初始化state
时,它总是false。
在useState
和hidden
显示错误后,我执行console.log
???
我不确定是什么原因造成了错误。我是不是错过了什么?我感谢你的帮助和见解
正如您所说的
st只是从redux 获取状态
这可能是问题所在。
可能在第一次渲染中,从redux获得的值不是正确的值(可能是null
或undefined
(,因此它将状态的默认值设置为false
,然后进行第二次渲染,返回正确的值,但不会将其重新分配给状态。
useState
的默认值将仅在第一次渲染中设置,如果在第一次呈现中它不是您想要的,则除非您设置它,否则它不会更改。
当type
更改时,可以使用useEffect
钩子重置hidden
export default () => {
const st = useSelector(state => state.body);
const { type } = st;
let bool = type === 'test';
const [ hidden, setHidden ] = useState(bool) //this is always true
// reset hidden if type changes
useEffect(() => {
setHidden(type === 'test')
}, [type])
}