【问题标题】:How to stop re render child component when any state changed in react js?reactjs中任何状态发生变化时如何停止重新渲染子组件?
【发布时间】:2019-10-03 13:01:24
【问题描述】:

我有一个父组件,在其中我包含了一个带有道具的子组件。 但是当父组件(与子组件无关)中的任何状态发生更改时,子组件会重新渲染。我不想重新渲染 在每次状态变化时。我们可以停下来吗?

import React, { useState } from "react";
import ReactDOM from "react-dom";
import Child from "./child";
import "./styles.css";

function App() {
  const [any_state, setAnyState] = useState(false);

  const handleClick = () => {
    setAnyState(!any_state);
  };
  return (
    <div className="App">
      Parent Page ({any_state ? "true" : "false"})
      <br />
      <button onClick={handleClick}>Click me</button>
      <Child data={"any data"} />
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

child.js

import React from "react";

function Child(props) {
  console.log("child component");
  return <div className="App">child Page</div>;
}

export default Child;

https://codesandbox.io/s/clever-oskar-fpxm3?fontsize=14

我不希望每次状态更改时都在控制台中显示“子组件”。

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    您想为此使用React.memo。阅读更多here

    这将防止在道具未更改时重新渲染。

    在您的child.js 中使用export default React.memo(Child); 而不是export default Child;

    import React from "react";
    
    function Child(props) {
      console.log("child component");
      return <div className="App">child Page</div>;
    }
    
    export default React.memo(Child);
    

    【讨论】:

      【解决方案2】:

      你必须设置一个Redux state

      或者你只是隔离 React Hook useState,做一个好的组件解构:)

      App.js

      import React, { useState } from "react";
      import ReactDOM from "react-dom";
      import Child from "./child";
      import Parent from "./parent"; // <--------- HERE
      import "./styles.css";
      
      function App() {
        return (
          <div className="App">
            <Parent />
            <Child data={"any data"} />
          </div>
        );
      }
      
      const rootElement = document.getElementById("root");
      ReactDOM.render(<App />, rootElement);
      

      父.js

      function Parent() {
        const [any_state, setAnyState] = useState(false);
      
        const handleClick = () => {
          setAnyState(!any_state);
        };
        return (
          <>
            Parent Page ({any_state ? "true" : "false"})
            <br />
            <button onClick={handleClick}>Click me</button>
          </>
        );
      }
      
      

      【讨论】:

      • 设置 Redux 不是这里的方法。有问题的问题更多是关于 React 管理和呈现父组件的子组件的方式。
      猜你喜欢
      • 2016-05-26
      • 2020-07-09
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      相关资源
      最近更新 更多