我记得当我发现它setState
是异步的时,我感到非常惊讶。现在,我偶然发现了一种“怪异”的行为,这种行为不符合我对setState
异步性的理解。
考虑下面的代码片段(由于某种原因导致Script Error
,这是外部沙箱:https :
//codesandbox.io/s/zwrvkz74y3):
class SomeComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
prop1: 1,
prop2: 2
};
setTimeout(this.changeProp1.bind(this), 100);
}
componentDidUpdate() {
console.info("componentDidUpdate called");
}
changeProp1() {
this.setState({ prop1: 2 });
this.changeProp2();
}
changeProp2() {
this.setState({ prop2: 3 });
}
render() {
const { prop1, prop2 } = this.state;
return React.createElement('div', null, `prop1: ${prop1}, prop2: ${prop2}`);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(React.createElement(SomeComponent), rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
如果运行此程序并检查控制台,您将看到该componentDidUpdate
调用被两次调用,但是不应该setStates
仅一次累积和更新Component吗?
更新 :我认为我的困惑来自ReactJS网站上的“ 状态更新可能是异步的”部分中的这个短语:
React可以将多个setState()调用批处理到单个更新中以提高性能。
正如参考资料的链接部分所述,
React 可以将 多个setState()调用批处理到单个更新中以提高性能。
至少在React 16中,它 不应该 批量更新状态。
正如React团队的Dan Abramov在相关答案中所广泛解释的那样,该状态当前仅从事件侦听器中进行批量更新,也可以setState
在生命周期挂钩(componentDidMount
,componentDidUpdate
)中进行同步调用。预计这将在React17中进行更改。
在React16中,unstable_batchedUpdates
应该显式地使用它来无条件地批量更新状态(一个demo):
setTimeout(() => {
ReactDOM.unstable_batchedUpdates(() => {
this.changeProp1();
});
}, 100);
我在一个应用程序的前端原型上工作,该应用程序具有给定的JS、React和CoreUI4 React技术栈。我来自Python背景,在网络开发和我给定的技术堆栈方面没有太多经验。当我不得不开始使用钩子时,这一点变得很明显。 问题 我真的不明白为什么它不更新我的和/或不渲染。我需要一个条件渲染,我也使用。 我试图: 从我的主应用程序中传递一个更大的状态,一旦我启动条件逻辑(挂钩规则)就无法工作。 当我
尽管试图避免所有记录在案的陷阱,阻止React在状态更改后重新渲染,但我仍然无法解决我的问题: } 从每个长方体组件调用update函数,并触发长方体网格上新颜色的指定。 试图避免常见的错误: 颜色数组只有在通过扩展运算符从状态复制后才被修改 通过setState()传递新数组 此外,我还处理了两个组件中函数的实例绑定 但是,尽管onClick成功触发了状态更改,但不会进行重新渲染。我在这里缺少的
在C 11中是否有可能累积许多s,每个都由给定的函数(其API我不能更改)返回到容器中,而无需复制任何元素? 注意1,即使元素没有move赋值操作符的move构造函数,也不能复制元素,例如示例中的int。因此,您可以移动一块元素(通过复制指针),但不能移动单个元素。 注意2,容器必须允许使用单个迭代器对所有累积元素进行迭代。So<代码>标准::向量 显然,编写一些允许这样做的容器或使用
问题内容: 我正在做一个Flask应用程序。我有一个登录区域,一个博客区域。如果要获取用户的登录名,我将呈现登录模板。但这不会呈现必须显示在登录区域下方的博客模板。 我将尝试使其更加清晰: 现在我有一个扩展它,并进入登录块。我有一个进入。如何同时渲染两者?当我这样做时,我只能在login.html或之一上调用它。 请帮帮我。如果你需要,我会提供更多详细信息。 问题答案: 你可能会以错误的方式考虑布
我试图在if语句中设置状态,但它不会这样做。结果,我需要从if语句中更新状态,在那个里我可以接收经度和纬度坐标,但它不会保存状态。若我在If语句之外的控制台中回显,我将只读取第一个setState值表单componentWillMount。有什么问题吗?我做错了什么?结构如下:
我正在尝试为我的每个d3js元素使用reactjs组件。父组件绘制图形,子组件应在其周围绘制圆环。但是现在渲染函数将它们分开绘制。下面的代码显示了如何将图形svg追加到父组件中(在内部): 以下是父组件渲染函数的代码: 我认为子组件中存在一个问题,我尝试了选择(#容器),但它找不到它。所以我不得不使用将甜甜圈附加到一个单独的div: 我应该如何在子组件中更改它?是否需要更改父渲染函数?