3 回答

TA貢獻1794條經驗 獲得超8個贊
當您像這樣更改值時:
this.state.filtersEnabled = true
您正在改變財產的價值。但是當你像這樣改變值時:
filtersEnabled = true
您基本上為filtersEnabled 分配了一個新值。不再引用原始值。
考慮這個例子:
let a = 1;
let b = a;
a++;
你期望b是嗎2?不,因為++、 like+=和=都是創(chuàng)建新分配的運算符。
這也是我們需要let這些案例的原因。const不允許我們做出改變。
然而,這確實改變了兩者:
const a = { val: 1 };
const b = a;
a.val++;
b指向同一個對象。我們從不重新分配a(這也是我們可以在這里使用的原因),但我們確實重新分配(和)的const屬性。所以仍然是同一個對象,但我們修改了對象內部的某些內容。 ab

TA貢獻1807條經驗 獲得超9個贊
在 React 中,當你想要更新時,state
你應該通過方法傳遞,this.setState
而不是直接改變狀態(tài)。
不要直接修改狀態(tài)
執(zhí)行destructuring
該操作this.state
將根據從解構的對象獲取的不同鍵的值創(chuàng)建新變量。這將失去元素與引用的任何類型的耦合,因為只有對象鍵可以引用它們的主要引用,無論它們發(fā)生變化。
let person = {
? "name": "John Doe",
? "age": 40
};
person.name = "Jeanne Doe";
console.log(person);
let { name } = person;
name = "Scott Duck"
console.log(person);
正如您在上面的示例中看到的,在我解構對象之后,person
變量name
不再與person
對象緊密相連,我們釋放了對該person.name
屬性的引用。
當您訪問時,filtersEnabled
您不再訪問具有相同名稱的組件狀態(tài)的值,而是訪問該變量在特定時間保存的值。
為了保持對狀態(tài)中的值的嚴格控制,請使用this.setState
改變狀態(tài)并通過this.state.filtersEnabled
或使用結構化值進行訪問如果您知道解構中創(chuàng)建的變量所保存的值將與 中的值相同state
,則可以在只要render
我們知道render方法大多數時候都會在狀態(tài)改變時執(zhí)行。

TA貢獻1854條經驗 獲得超8個贊
不會。通過破壞變量,它會轉換為局部變量,并且狀態(tài)是全局的,因此您需要做的就是this.state.filtersEnabled = true
在狀態(tài)中全局重新分配它,以便在類中的任何地方使用。
通過這樣做this.state.filtersEnabled = true
,它將重新評估該值,但如果您需要重新渲染視圖,那么您必須這樣做this.setState({ filtersEnabled: true});
添加回答
舉報