【问题标题】:Can I use a "UseEffect" only with a certain value?我可以只使用具有特定值的“UseEffect”吗?
【发布时间】:2021-04-04 06:57:35
【问题描述】:

您好,我正在尝试使用 React hooks 的 UseEffect,我知道我可以添加在更改时可以激活它的变量,但我想知道是否有办法仅在值满足某些条件时激活 useEffect .

我已经在 useEffect 中创建了一个条件,并且我知道它可以工作,但我想知道是否还有其他方法。

useEffect(() => {
  doSomething();
  if(!isOpen)
   doSomething2();
}, [isOpen, otherThing]); 

在上面的示例中,我希望 doSomething2 仅在其值为 false 时起作用。

在本例中,isOpen 的默认值为 false,然后当它从数据库中检索某些内容时,它会变为 true,最后当它完成获取时,它会返回 false。

我希望钩子仅在值从 true 切换到 false 时激活,而不是在每次更改时激活。

有没有办法做到这一点?

【问题讨论】:

    标签: reactjs react-hooks


    【解决方案1】:

    别无他法。您的尝试已经正确。这是唯一的方法。干杯!

    useEffect() 只允许依赖,没有条件属性。

    【讨论】:

      【解决方案2】:

      您可以拥有多个可以像这样更改的数据。

      const [selectedCategory, setSelectedCategory] = React.useState(null);
      const [restaurants, setRestaurants] = React.useState({});
      

      如果您想获取特定属性的事件,例如 restaurants 那么您可以为此使用一种useEffect 方法。对于另一个,您可以使用另一种useEffect 方法,如下所示。

      const [selectedCategory, setSelectedCategory] = React.useState(null);
      const [restaurants, setRestaurants] = React.useState(restaurantData);
      
      useEffect(() => {
         console.log("this is for selectedCategory")
      }, [selectedCategory]);
      
      useEffect(() => {
         console.log("this is for restaurants")
      }, [restaurants]);
      

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        • 2021-05-20
        • 1970-01-01
        • 2021-05-31
        相关资源
        最近更新 更多