Вам нужно навести порядок. Вы не можете использовать функцию в состоянии. Состояние только для данных, которые могут меняться в течение определенного периода времени.
Вы можете посмотреть на мою реализацию и получить некоторое представление. https://codesandbox.io/s/calculatorreact-gi30v
Как buttonState, не должен быть частью состояния. Он может перейти к свойству класса
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