我对 Reactjs 的 setState 函数有一个非常奇怪的问题。它似乎希望我以一种非常具体的方式来构建我的代码片段,否则它将无法工作。我不知道为什么这会导致问题,因为这两种结构对我来说看起来相同,但行为方式不同。
我正在使用 Browserify 和 Babelify 转译和 gulp-uglify 来缩小我的代码。可能是这些构建步骤中的一个或组合导致了问题,但我不知道是哪个(因此我也不知道是否以及在哪里提交问题)
这是我的代码的相关部分:
export default class VideoAppScreen extends React.Component {
constructor( props ) {
super( props );
this.state = {
playing: 0,
playlist: []
};
}
addVideo( video ) {
this.setState( ( previousState ) => {
return {playlist: previousState.playlist.push( video )};
});
}
onEnd( event ) {
console.log( "onEnd", event, this.state );
this.setState( ( previousState ) => {
return {playing: previousState.playing + 1};
});
}
render() {
// stuff
}
}
如您所见,setState 块的格式如下:
this.setState( ( previousState ) => {
return {item: value};
});
像这样 addVideo 方法会导致错误:Uncaught TypeError: t.playlist.push is not a function
。
如果我将块更改为这样:
this.setState( ( previousState ) => {item: value} );
addVideo 方法有效,但 onEnd 方法停止工作(不会导致错误,它只是不更新状态)
我不明白为什么这些不能以相同的方式工作......出于格式化目的,我希望它们都具有相同的样式,但似乎它们仅在以任何一种样式格式化时才有效。