Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用react.js立即强制重新渲染(更新状态并更新DOM)_Javascript_Reactjs - Fatal编程技术网

Javascript 使用react.js立即强制重新渲染(更新状态并更新DOM)

Javascript 使用react.js立即强制重新渲染(更新状态并更新DOM),javascript,reactjs,Javascript,Reactjs,我意识到调用setState不会立即更新this.state,也不会立即调用render并刷新DOM。医生说 setState()不会立即改变this.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值 无法保证对setState调用的同步操作,并且可能会对调用进行批处理以提高性能 我希望能够在任何时候强制进行这样的“状态转换”。这似乎应该是一个相当自然的操作,但我在文档中找不到任何提及。有办法吗?您可以使用forceUpdate实现此目的: 如果rende

我意识到调用
setState
不会立即更新
this.state
,也不会立即调用
render
并刷新DOM。医生说

setState()不会立即改变this.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值

无法保证对setState调用的同步操作,并且可能会对调用进行批处理以提高性能


我希望能够在任何时候强制进行这样的“状态转换”。这似乎应该是一个相当自然的操作,但我在文档中找不到任何提及。有办法吗?

您可以使用
forceUpdate
实现此目的:

如果render()方法读取的不是this.props或 在this.state中,您需要告知React何时需要重新运行render() 通过调用forceUpdate()。如果需要,还需要调用forceUpdate() 你可以直接改变这个状态


您可以将
强制更新
与顶级组件上的钥匙结合使用

let key= 0;

var Hello = React.createClass({

  sudoForceUpdate(){
    key++;
    this.forceUpdate();   
  },
  render: function(){
    return <div key={key}>Example</div>;
  }
});
let key=0;
var Hello=React.createClass({
sudoForceUpdate(){
key++;
这个.forceUpdate();
},
render:function(){
返回示例;
}
});
通过编辑密钥并强制更新,dom将始终重新加载

下面是一个示例,它突出显示了仅强制编辑和带有关键点更改*的编辑之间的区别

*请注意,这可能是非常糟糕的做法

感谢本·阿尔伯特:

您的用例是什么?你可能对atomic更感兴趣。你想做什么来满足这个要求?我不确定
forceUpdate
是否符合我的要求(可能是这样,但不管怎样,都不清楚。)我认为
forceUpdate
的目的是让元素在不设置状态的情况下重新渲染,但是这个渲染仍然可以像任何渲染一样排队。那是对的还是错的?没错
forceUpdate
使组件渲染为vDOM元素,但它不会强制将vDOM刷新到实际DOM(不确定如何实现所需)