我知道我不應該直接做出反應突變狀態,但怎麼樣的情況,當我使用功能:我可以改變傳遞給setState函數的狀態嗎?
onSocialClick = e => {
const id = e.target.value;
this.setState((prevState, props) => {
prevState[id] = !(prevState[id]);
return prevState;
});
};
它是一個錯誤的修改傳遞的對象?
編輯:
事實證明,我們大多數人都錯在這裏。 React docs state it clearly現在:
prevState是對之前狀態的參考。它不應該直接變異。相反,應該通過建立一個基於prevState和道具輸入的新對象來表示更改。
感謝@TomášHübelbauer在評論中指出。
這是不是一個錯誤:)不直接修改狀態意味着你應該使用'setState',而不是'this.state = ...'。如果你這樣做 - 一切都好,無論你用什麼傳入參數。 – elmeister
@Tomasz我問了一個後續問題,因爲我懷疑你的代碼片段。您可能會覺得這很有趣:https://stackoverflow.com/q/47339643/2715716 –
@TomášHübelbauer謝謝!我做了一個編輯。 – Tomasz