大家好,我对您喜欢哪种方法有疑问:

在带有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/

10-10 05:55