Reactjs React{useState,useEffect)。React使用单个“useEffect”渲染的频率是多少,它在回调中触发一个&“x27”设置状态&“x27”?
在这里,我期望3倍的渲染Reactjs React{useState,useEffect)。React使用单个“useEffect”渲染的频率是多少,它在回调中触发一个&“x27”设置状态&“x27”?,reactjs,use-effect,use-state,Reactjs,Use Effect,Use State,在这里,我期望3倍的渲染 从最初的坐骑 从唯一的“使用效果” 来自axios回调附带的“setValue(data)” 为什么只有两个渲染 const Main = () => { const [value, setValue] = useState(""); useEffect( () => { fetch() }, []); const fetch = () => { axios.get(url) .then(data => { s
const Main = () => {
const [value, setValue] = useState("");
useEffect( () => {
fetch()
}, []);
const fetch = () => {
axios.get(url)
.then(data => {
setValue(data)
});
};
console.log("before render"); // 2x "before render"
return (...);
};
ReactDOM.render(<Main />, document.getElementById("root"));
const Main=()=>{
const[value,setValue]=useState(“”);
useffect(()=>{
fetch()
}, []);
常量fetch=()=>{
获取(url)
。然后(数据=>{
设定值(数据)
});
};
console.log(“渲染前”);//2x“渲染前”
回报率(…);
};
render(,document.getElementById(“根”));
useEffect不会触发重新渲染,它只调用为该效果提供的回调。只有状态修改会导致重新渲染。useEffect不会触发重新渲染,它只调用为该效果提供的回调。只有状态修改会导致重新渲染。只会发生2次渲染-
1- From the initial mount.
2- From the 'setValue(data)', which comes with the axios-callback.
与setValue和类似的钩子一样,它们不会立即重新呈现组件。它们可能会批处理更新或将更新推迟到以后。因此,在更新之后,您只能获得一个重新呈现器
最新的设置值调用
useffect
在被告知之前不会触发重新渲染。只会发生2次渲染-
1- From the initial mount.
2- From the 'setValue(data)', which comes with the axios-callback.
与setValue和类似的钩子一样,它们不会立即重新呈现组件。它们可能会批处理更新或将更新推迟到以后。因此,在更新之后,您只能获得一个重新呈现器
最新的设置值调用
useffect
在被告知之前不会触发重新渲染。简单快速。谢谢。我还有一个问题,你可以帮助我:为什么我会得到3次渲染,当:-我删除了“useffect”中的“[]”并且我的axios响应总是相同的(-->状态的内容没有变化)@coasterrel Useffect将在组件渲染时运行,这可能比您想象的要多。知识1和知识2的一些链接-“简单快速。谢谢。很难。我还有一个问题,您可以帮助我:为什么我会得到3次渲染,当:-我删除了“Useffect”中的“[]”时,我的axios响应总是一样的(->状态的内容没有变化)。@coasterrel Useffect将在组件渲染时运行,这可能比您想象的要多。知识1和2的一些链接-`@Viktor\u W谢谢。我还有一个问题,您可以帮助我:为什么我得到3个渲染,当:-我删除'[]'in'useffect'-我的axios响应总是相同的(->状态内容没有变化)。不确定。一个理论是:Axios返回一个对象,包含statuscode和类似的东西,对吗?假设res1和res2是同一Axios请求的响应。然后,res1==res2
将始终为假,因为它们是不同的对象。因此,当React进行比较时,它认为您已分配了一个新值。但是res1.data==res2.data
将为真。但是,这不应该在3次渲染时停止,而应该重新渲染infinitely@Viktor_W谢谢。我还有一个问题,你可以帮我:为什么我得到3个渲染,当:-我删除了“useEffect”中的“[]”并且我的axios响应总是相同的(->状态的内容没有变化)。不确定。一个理论是:Axios返回一个对象,包含statuscode和类似的东西,对吗?假设res1和res2是同一Axios请求的响应。然后,res1==res2
将始终为假,因为它们是不同的对象。因此,当React进行比较时,它认为您已分配了一个新值。但是res1.data==res2.data
应该是真的。但是,这不应该在3次渲染时停止,而应该无限次地重新渲染