大家好,我对您喜欢哪种方法有疑问:
在带有TypeScript的React功能组件中,使用useSelector从Redux State获取值的是:
1)
const campaign = useSelector(campaignSelector);
const [audienceSample, setAudienceSample] = useState<number | null>((campaign ||
{max_completes_total: null})['max_completes_total']);
从
2)
const campaign = useSelector(campaignSelector);
const [audienceSample, setAudienceSample] = useState<number | null>(null);
useEffect(() => {
setAudienceSample(campaign.max_completes_total)
},[campaign])
我知道1的代码较少,但您认为它的速度更快,并且您更喜欢哪一种
感谢大伙们
最佳答案
第一个无效。这是无效的,因为来自useState
的状态是持久的,并且在useState
中设置的参数是默认值,这意味着-仅在第一次安装组件时才设置该参数。因此,更改redux状态和useSelector
给定的新值不会影响本地状态,它将始终指示原始默认值。
回答您的问题-答案不是关于我的偏爱,而是有效的答案,第二个只是正确的答案。但是,从代码角度来看,我在这里提出的最佳解决方案是将两者合并一点,以避免将null设置为默认值,并避免在useState
中设置泛型类型。考虑以下代码:
const campaign = useSelector(campaignSelector);
const [audienceSample, setAudienceSample] = useState(campaign?.max_completes_total); // set campaign as default
useEffect(() => {
setAudienceSample(campaign?.max_completes_total)
},[campaign]) // set the relation between redux campaign and local state
另外,如您所见,我使用了optional chaining来简化代码。本地状态的类型将自动推断为
number | undefined
。首先,据我了解,您的情况是在redux和本地状态之间建立关系,那么第二个是唯一的选择。如果您只想设置默认值,则根本不需要使用
useEffect
。关于reactjs - 我应该将useSelector传递给useState吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59172453/