componentDidMount中的setState不会改变状态
setState in componentDidMount doesn't change state
我知道里面有很多关于componentdidmount和setState的问题。但我不明白为什么我的this.state.context是空的,当我console.log它?
这是我的组件的一个片段。我用画布画了一些人物。
var App = React.createClass({
getInitialState(){
var board = [];
for(var i=0; i<30; i++){
var temp=[];
for(var j=0; j<50; j++){
temp.push(0);
}
board.push(temp);
}
//glider pattern
board[0][2]=1;
board[1][0]=1;
board[1][1]=1;
board[2][1]=1;
board[2][2]=1;
return {
width: 550,
height: 350,
step: 0,
board: board,
isOn: true,
isPaused: false,
context: null
}
},
componentDidMount(){
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
//drawing text
ctx.fillStyle = "#777";
ctx.font = "16px arial";
ctx.fillText("Yonger", 25, 343);
ctx.fillText("Older", 120, 343);
ctx.fillText("Generation:", 25, 18);
ctx.fillStyle = "rgb(140, 198, 101)";
ctx.fillRect (85, 333, 10, 10);
ctx.fillStyle = "rgb(30, 104, 35)";
ctx.fillRect (100, 333, 10, 10);
this.setState({context:ctx});
console.log(this.state.context);
this.draw();
},
这时有些奇怪:
console.log(this.state.context);
console.log将打印空!!但是ctx实际上不是空的!!
setState
操作是批处理的,因此它们是异步的。您可以提供一个函数作为第二个参数,该函数将在setState
完成并且组件重新渲染时调用。更多信息请参见:https://facebook.github.io/react/docs/component-api.html
这个应该可以工作:
this.setState({context:ctx}, () => {
console.log(this.state.context);
});
相关文章:
- 表示改变状态的函数的Redux字
- 当道具函数改变状态时,我该如何使用redux
- ReactJS:如何在改变状态后立即更新组件
- 在不改变状态的情况下,根据减少器中的给定索引更改嵌套数组值
- React-道具改变时改变状态
- 在材质设计和angularjs中不动态改变状态的复选框
- React不会立即改变状态
- react.js在改变状态数组后不更新DOM
- 改变状态时URL不更新
- ui.路由器改变状态,但ui-view不显示任何东西
- 如何改变状态的所有复选框(在所有页面),当点击selectAll复选框[使用jQuery数据表]
- ui -路由器在使用$state.go()时不改变状态
- componentDidMount中的setState不会改变状态
- AJAX调用不工作在React一旦我改变状态
- 如何在angular js中应用加载器/旋转器来改变状态
- 背面的离子嵌套状态不会改变状态
- Vuex在分派动作时改变状态中的2个元素
- 不能用Cordova改变状态栏
- 为什么点击一个改变状态且与ajax调用无关的选项卡会创建ajax调用?
- CSS活动伪类改变状态吞噬onclick事件