【发布时间】:2019-08-18 11:14:43
【问题描述】:
我玩过 react hooks,遇到了一个我不明白的问题。
代码在这里https://codesandbox.io/embed/hnrch-hooks-issue-dfk0t 该示例有 2 个简单的组件:
应用组件
const App = () => {
const [num, setNum] = useState(0);
const [str, setStr] = useState();
const inc = () => {
setNum(num + 1);
setStr(num >= 5 ? ">= 5" : "< 5");
console.log(num);
};
const button = <button onClick={inc}>++</button>;
console.log("parent rerender", num);
return (
<div className="App">
<h1>App</h1>
<Child str={str}>{button}</Child>
</div>
);
};
子组件
const Child = React.memo(
({ str, children }) => {
console.log("child rerender");
return (
<div>
<>
<h2>Functional Child</h2>
<p>{str}</p>
{children}
</>
</div>
);
}
(prev, props) => {
return prev.str === props.str;
}
);
所以我将孩子包裹在 React.memo 中,并且只有在 str 不同时才应该重新渲染。但是它也有孩子,并且它传递了一个按钮,该按钮正在增加父级(App)内的计数器。
问题是:计数器设置为 1 后将停止递增。有人可以向我解释这个问题以及我需要了解什么以避免这些错误吗?
【问题讨论】:
标签: reactjs react-hooks