2 回答
TA貢獻2011條經驗 獲得超2個贊
React 不渲染函數,就像它不渲染布爾值一樣。
如果你想渲染函數聲明(這沒有多大意義),而不是在你的 div中{this.state.formula}使用。{this.state.formula.toString()}
但是,由于您希望渲染您的返回值,因此如果設置某個狀態并且您可以僅渲染該狀態handleFormula會更好。handleFormula
為什么這樣更好?因為設置新狀態會導致重新渲染,您將始終在 UI 中看到新狀態。渲染的返回值this.state.formula將始終相同,您可能會將其視為錯誤。
NB 將函數附加到狀態是不尋常的,但它不應該引起任何類型的問題。由于性能原因,我一直看到人們在上下文提供程序中這樣做:value={this.state}他們將方法附加到狀態。
TA貢獻1783條經驗 獲得超5個贊
你需要清理一下。您不能在該州使用功能。該狀態僅適用于可以在一段時間內更改的數據。
您可以查看我的實現并獲得一些想法。 https://codesandbox.io/s/calculatorreact-gi30v
像 buttonState 一樣,不應該是 state 的一部分。它可以移動到類屬性
this.buttonState = [
{ key: "AC", col: "red", key1: "AC" },
{ key: "/", col: "gray", key1: "divide", keypress: "o", divide: "/" },
{ key: "x", col: "gray", key1: "multiply", keypress: "j" },
// rest
{ key: "=", col: "gray", key1: "equals" },
{ key: ".", col: "gray", key1: "point", keypress: "n" },
{ key: "CC", col: "red", key1: "delete" }
];
為要在視圖中顯示的字符串添加新的狀態道具
this.state = {
display: "0",
formula: this.handleFormula,
str: ""
};
當您想在執行公式后顯示最新值時更新字符串。
handleFormula() {
let str = this.state.display;
let newArr = str.match(/["/"+"x"-]/gi);
let newStr = "";
if (newArr) {
return str;
} else {
for (let i = newArr.length - 1; i > -1; i--) {
if (parseFloat(newArr[i]) !== NaN) {
newStr += newArr[i];
} else if (i === newArr.length - 1 && parseFloat(newArr[i]) === NaN) {
return newArr[i];
} else {
return this.setState({str: newStr});
}
}
}
}
您可以查看我的實現并獲得一些想法。 https://codesandbox.io/s/calculatorreact-gi30v
添加回答
舉報
