【发布时间】:2021-09-10 15:11:14
【问题描述】:
当使用带有FunctionComponent 的useState 钩子(即JSX.Element)时,React 会神奇地在组件上调用React.createElement()。
虽然不是大问题,但也是意料之中的。
我想有一个样本会更清楚:
function Test() {
return <div>Hello</div>;
}
function App() {
const [component, setComponent] = useState();
return (
<div className="App">
<h1>useState with a component</h1>
<button onClick={() => setComponent(Test)}>Set the state</button>
<div>
{component}
</div>
<div>
{Test}
</div>
</div>
);
}
单击按钮时,您会期望 2 个 div 元素呈现相同的内容:它们都应该包含 Test 组件。但实际上并非如此:component 包含 React.createElement(Test)。
这里是说明这一点的代码框:https://codesandbox.io/s/react-usestate-with-a-component-oho5b?file=/src/index.js
我看不到任何可以详细说明此行为的内容。
我的问题是:
- 这是一个错误还是一个功能?
- 如果这是一个特性,我们能否在未来版本的 React 中依赖它?
【问题讨论】:
-
问题是......
Test函数在未被调用时如何返回?{Test}不应该是{Test()}吗? -
我没有看到任何“问题”该组件是什么。
-
我也没有发现任何问题。 codesandbox.io/s/… 你称它为 Test() 或
有效。而且你的状态也在起作用。 -
您正试图在 DOM 中渲染
component,这需要对createElement做出反应,以便确定Test渲染到什么。你还期望<div>{component}</div>做什么? -
@ElanHamburger 需要明确的是:React 不是自动调用
createElement。它实际上根本没有调用它。这是useState的更新程序工作方式的副作用。
标签: reactjs react-hooks use-state