我對Reactjs的setState函數有一個很奇怪的問題。 它似乎希望我以非常特定的方式構建我的代碼塊,否則它將無法工作。 我不知道爲什麼這會導致問題,因爲兩個結構對我來說看起來都一樣,但表現方式不同。奇怪的Reactjs setState行爲
我使用Browserify和Babelify來transpile和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方法停止工作(不會導致錯誤,它只是不更新狀態)
我無法弄清楚爲什麼這些不能以同樣的方式工作...爲了格式化的目的,我希望它們都具有相同的風格,但似乎只有在任何一種風格下格式化它們才能工作。
,你可以在[文檔的setState在看(https://facebook.github.io/react /docs/component-api.html),你可以使用一個函數(或對象nextState)作爲參數對setState,這個功能被用「previousState」(或稱爲currentState),並有返回nextState。 同樣,當格式化相同時,只有其中一個功能遇到問題,另一個會工作得很好,這告訴我應該正確使用它(否則兩者都不起作用),但其他地方存在問題。 –
你說得對。錯過了。另一個可能的問題:通過調用'previousState.playlist.push()'我認爲你直接也更新previousState,反應不喜歡。這可能是問題嗎? – wintvelt
Mhhh它可能是...但它** **工作時,我構建我的代碼,像這樣this.setState((previousState)=> {playlist:previousState.playlist.push(video)});'我' m會嘗試從我的構建過程中刪除uglify步驟並調試包文件 –