reactjs - 当两件事发生变化时 react 触发 useEffect

标签 reactjs

我正在尝试使用 react Hook ,并且我想在两件事发生变化时运行一个函数:

const Filter = ({ orderList, orders }) => {
  const [from, setFrom] = useState();
  const [to, setTo] = useState();
  const [filteredList, setFilteredList] = useState(orders);

  useEffect(() => {
    const filteredOrders = orders.filter(function(item) {
      return item.order_number >= from && item.order_number <= to;
    });
    setFilteredList(filteredOrders);
    console.log(filteredList);
  }, [from, to]);

更准确地说,我只想在 BOTH from 时过滤数组和 to状态更改,这是因为我试图从用户定义的某些输入中过滤数组。

我怎样才能做到这一点?

最佳答案

您将无法通过将更多参数传递给 useEffect() 来完成此操作。 , 默认情况下会导致 useEffect()只要更改一项就执行。

但是,您可以结合 useEffectuseRef来实现这一点。我们将使用 useRef存储状态的先前值并将其与我们的新状态值进行比较。

参见代码框,例如:https://codesandbox.io/s/heuristic-nobel-6ece5

const App = () => {
  const [from, setFrom] = useState();
  const [to, setTo] = useState();

  const previousValues = useRef({ from, to });

  useEffect(() => {
    if (
      previousValues.current.from !== from &&
      previousValues.current.to !== to
    ) {
      //your logic here
      console.log("both changed")
      previousValues.current = { from, to };
    }
  });

  return (
    <div>
      <input
        placeholder="from"
        value={from}
        onChange={e => setFrom(e.target.value)}
      />
      <input
        placeholder="to"
        value={to}
        onChange={e => setTo(e.target.value)}
      />
    </div>
  );
};

关于reactjs - 当两件事发生变化时 react 触发 useEffect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56302994/

相关文章:

javascript - 为什么使用无状态功能组件而不是基于类的组件?

javascript - Undefined is not an object (evaluating 'React.PropTypes.Number') 错误

javascript - TransitionGroup 和 CssTransition : Exit transition not applied

reactjs - 有条件地渲染 TouchableHighlight 的 onPress

javascript - 在 React 状态中存储自动更新的对象

javascript - 如何为侧边栏中的每个部分制作不同的应用栏? [ReactJs]

reactjs - 如何在React中的Docker-Compose中配置.env文件?

mysql - POST 表单数据到 Express App 成功,使用 sequelize 插入 MySQL 数据库

reactjs - 在 React 中管理嵌套状态的好方法

Javascript mouseDown - 无法读取未定义的 currentTarget