应用程序组件
import React from "react";
import "./styles.css";
import Test from "../Test";
export default function App() {
return (
<div className="App">
{console.log("rendering [APP]")}
<Test />
<h1>Check your console</h1>
<h2>why test component renders twice?</h2>
<h2> Event the test component renders twice for every key press</h2>
</div>
);
}
测试组件:
import React from "react";
import { useState } from "react";
const Test = () => {
const [values, setValues] = useState({
email: "",
password: "",
error: false,
loading: false,
didRedirect: false
});
const { email, password, error, loading, didRedirect } = values;
const handleChange = name => {
return event => {
setValues({
...values,
error: false,
[name]: event.target.value
});
};
};
const errorMessage = (
<div
className="alert alert-danger"
style={{ display: error ? "block" : "none" }}
>
{error}
</div>
);
const onSubmit = event => {
event.preventDefault();
setValues({ ...values, loading: true });
};
const signInForm = (
<div className="row">
<div className="col-md-4 offset-md-4">
<form>
{errorMessage}
<div className="form-group">
<label className="text-light">Email</label>
<input
className="form-control"
onChange={handleChange("email")}
value={email}
type="text"
/>
</div>
<div className="form-group">
<label className="text-light">Passsword</label>
<input
className="form-control"
type="password"
value={password}
onChange={handleChange("password")}
/>
</div>
<button className="btn btn-success btn-block" onClick={onSubmit}>
Submit
</button>
</form>
</div>
</div>
);
return (
<div>
{console.log("rendering [test]")}
{signInForm}
</div>
);
};
export default Test;
In short:
what i expected in console:
rendering [APP]
rendering [test]
what i actually got:
rendering [APP]
rendering [test]
rendering [test]
因此,由于useState钩子的使用,您的测试组件将被第二次呈现。您的组件需要保持状态最新,因此每次状态更改时都必须重新加载。您有一个handleChange函数,它将触发每个输入更改,该函数将更改状态和组件重新加载。这就是react的基本工作原理。希望我能帮助你。
我认为这是因为codesandbox使用反应开发工具。我发现了一个封闭式的问题
https://github.com/facebook/react-devtools/issues/1333
因为在其他环境中,我们只有一个控制台。日志
这是来自@ravibagul91的演示
https://stackblitz.com/edit/react-qekebe
所以就像标题所说的,我的应用程序的主页因为某种原因渲染了两次,我不知道为什么。从我的浏览器路由器,我最初调用一个JS文件,从那里我调用我的HomePage组件和React路由器,但然后我的页面渲染两次,我不知道为什么。 我的浏览器路由器(index.js): 然后pp.js被称为: 然后我的主页组件(index.jsx): 和路线。js: 但是我的页面是这样渲染的: 我真的很困惑,所以任何建议都会
非常简单的例子:我的App.js文件读取 我的Test.js文件上写着 在控制台中,渲染总是打印两次。为什么啊?
我遇到了这个简单的React函数组件,它渲染四次,而我希望它最初渲染一次,执行useffect更新状态,然后再次渲染。相反,控制台发送4个日志输出,表示它渲染了4次。了解react功能组件的基本生命周期的原因和资源吗? https://codesandbox.io/s/solitary-tree-t120d?file=/src/App.js:149-191
此组件渲染两次并抛出错误。我知道这个错误是因为它们在reduce函数中没有返回语句。但我不明白的是,为什么它会渲染两次? 此外,当我删除代码时,它只呈现一次。据我所知,一个组件只能在四种情况下重新渲染 状态的变化 道具的变化 强制渲染 父母重新渲染。 在我的例子中,父组件没有重新渲染(我通过在父组件中使用console.log检查了它),并且这个组件是无状态的,没有道具被传递给它。有人能解释一下这
也许你们中的一些人可以帮我睁开眼睛。 我不明白为什么在这段代码中:https://codesandbox.io/s/use-state-renders-twice-6r1xl组件应用程序在安装并单击按钮时呈现两次(console.log被调用两次) 代码: 结果: 它只是一个功能组件挂钩!
我有一个组件,我设置了一个计数,让状态更新时,按钮点击。但是当我检查渲染时间时,每次我点击按钮它都会渲染两次。 https://codesandbox.io/s/brave-forest-yre6y?file=/src/App.js 我想知道: 为什么它是这样工作的