this.setState
для управления текущим состоянием компонента.Поэтому лучше оставить все как есть.
Вместо этого вы можете извлекать обработчики каждого оператора в отдельные файлы (или в один, в зависимости от ваших требований и времени).
handleNumbers = number => {
this.state.operator === null
? this.setState({firstValue: number})
: this.setState({lastValue: number});
}
handleOperators = operator => {
this.setState({operator: operationMap(opreator)});
}
operatorHandlers = operator => handler =>
onClickFunc(e){
e.target.className === "number"
? this.handleNumbers(e.target.value);
: this.handleOperators(e.target.value);
}
И вы можете переместить реализации операций в методы и переместить их в другой файл (ы) и экспортировать их.
// You can move these to another file(s) and export each method.
const addHandler = (state, props) => (x, y) => parseFloat(x) + parseFloat(y);
const subtractionHandler = (state, props) => (x, y) => parseFloat(x) - parseFloat(y);
const multiplicationHandler = (state, props) => (x, y) => parseFloat(x) * parseFloat(y);
const operationMap = {
"+": addHandler,
"-": subtractionHandler,
"X": multiplicationHandler
};
Если вы посмотрите на эти *Handler
методы, они принимают (state, props)
.
Цель состоит в том, чтобы иметь возможность перемещать логику оператора за пределы файла компонента.
Если вам интересно, проверьте это twit от Дана Абрамова (основного разработчика React).
Он объяснил лучшее.
Вы можете сходить с ума с большим количеством рефакторингов, но делайте это, когда это имеет смысл.
(Я могу подумать об использовании шаблона стратегии для внедрения стратегий (* методы-обработчики) с использованием компонентов высокого порядка и т. Д. * )