组件重置,还原组件,react

1,493 阅读1分钟

组件重置,还原组件,react

利用虚拟DOM更新原理

// 高阶组件,props 传入 _factor参数,参数改变时会重新渲染组件,不保存任何状态,相当于重置
function resetCom(Com, val) {
  return function (props) {
    let [num, setNum] = useState(val);
    if (!Object.is(props._factor, num)) {
      Promise.resolve().then(() => {
        setNum(props._factor);
      });
      return <div></div>;
    }
    return <Com {...props} />;
  };
}

// 使用

// 包装需要重置的组件
const Box = resetCom(function () {
  let [num, setNum] = useState(0);
  return (
    <div>
      <h3>这里是 App的子组件 , Box 组件</h3>
      <p>点击改变Box 的 状态数据</p>
      <button onClick={() => setNum(num + 1)}>Box {num}</button>
    </div>
  );
});

// 使用需要重置组件的组件
function App() {
  // 当数据改变时会重置Box组件,清除状态(重置组件)
  let [num, setNum] = useState(0);
  return (
    <div>
      <h3>这里是 App 组件</h3>
      <p>点击改变App状态数据,从而重置 Box组件的状态</p>
      <button onClick={() => setNum(num + 1)}>App {num}</button>
      <p style={{ height: "30px" }}></p>
      <Box _factor={num} />
    </div>
  );
}