Вот забавный проект, использующий основы React-App для создания функционального калькулятора.
Пожалуйста, проверьте часть 1 на предмет каркасов и стиля, используемых в этом проекте.
Если вы хотите перейти к моему GitHub, клонируйте репо и код вместе с моим учебником.
Нажмите здесь для репо: Dieter-Rams-React-Calc
Хорошо, давайте начнем!
Шаг 1. Кнопки калькулятора
Сначала нам нужно понять наше приложение в компонентах. У пользователя есть три варианта кнопок:
- цифры и операторы
- Равно
- чистый
Компоненты кнопки будут использовать следующий синтаксис для представления кнопки в калькуляторе.
import React, {Component} from 'react'; class Button extends Component { render() { return() } } export default Button
Обратите внимание, как this.props.children
Учет для дочернего элемента с экспортируемым компонентом. Таким образом, мы можем просто разместить наш номер или операторы в JSX. Handleclick ()
Позволяет выполнять функцию Handleclick в экспортируемом компоненте.
После того, как вы импортируете свой документ JSX, должен выглядеть так.
CE =
Шаг 2. Функциональность – Решение уравнений
В традиционных приложениях калькулятора жесткие условные утверждения используются для выполнения математических функций или использования Math.js используется для вычислений. Это приложение решит уравнения просто с использованием React Hooks и Json объект для вычислений.
Сначала давайте определим наши крючки:
const [input, setInput] = useState(''); const [prevNum, setPrevNum] = useState(''); const [curNum, setCurNum] = useState(''); const [operator, setOperator] = useState(''); useEffect(() => { // Perform computation }, [curNum,operator, prevNum])
Большой! Теперь нам нужен способ установить наши штаты и выполнять расчеты, пока VDOM перепродает. Это означает, что нам нужна функция для каждого случая:
Clickbutton
- Добавьте номер на вход
Addzerotoinput
- setInput только в том случае, если нет нуля
Добавить
- Убедитесь, что только один десятичный
Handleclear
- Очистите все состояние обратно к инициативу ”
решать
- придать ценность
- Рендерное решение
Operation_func
- Установите оператор, Prevnum и инициализируйте вход
Таким образом, со всеми этими ситуациями, мы должны теперь играть в какую -то игру с миксом и матчем. Таким образом, мы можем понять, что нужно для обработки, изменения или вызванного в каждой из функций обратного вызова выше.
✅ | Clickbutton | |||
✅ | addzero | |||
✅ | Добавить | |||
✅ | ✅ | Чисто | ✅ | ✅ |
✅ | решать | |||
✅ | Operation_func | ✅ | ✅ |
Учитывая приведенную выше таблицу, мы видим, как будет реализована каждая функция использования представлена функциями обратного вызова. Внедрение всего, что мы получаем:
const clickButton = (e) => { if(e==="+" || e==='-' ||e=== '/' ||e=== '*'){ setOperator(e) console.log(e); } else { setInput(input + e); console.log(input); } }
const handleClear = () =>{ setInput(''); setPrevNum(''); setCurNum(''); setOperator(''); }
const addZeroToInput = (e)=>{ if(input!==''){ setInput(input + e); console.log(input); } } const addDecimalToInput = (e)=>{ if(input.indexOf('.')=== -1){ setInput(input+e) console.log(input); } }
const solve = () =>{ setCurNum(input); } function operation_Func(e) { setPrevNum(input); setInput(''); setOperator(e); }
Использовать
Наконец, мы должны откуда -то получить наши решения, но избежать петли рендеринга vdom, которая распространена с React. Лучший способ сделать это было бы Использоватьэффект Крюк.
Как только мы узнаем, что оператор был установлен, нам нужен способ передать Prevnum и Curnum в уравнение. Большинство приложений калькулятора будут использовать, если/иначе для выполнения функций, но мы не большинство разработчиков! Используя объект JSON, мы можем реформировать наш процесс выбора в одну строку кода.
Мы должны получить что -то вроде этого:
useEffect(() => { const math_it_Up = { '+': function(x,y){return x + y}, '-': function(x,y){return x - y}, '*':function(x,y){return x*y}, '/':function(x,y){return x/y} }; if(curNum !== ''){ console.log(curNum); if(operator !== ''){ //let solution = Math.floor(parseFloat(prevNum) + parseFloat(curNum)); let solution = math_it_Up[operator](parseFloat(prevNum),parseFloat(curNum)); setInput(solution); setOperator(''); setCurNum('');} } }, [curNum,operator, prevNum])
Если хотите, вы можете добавить другие уравнения или операции в функцию MATH_IT_UP. Конечный продукт должен выглядеть примерно так.
Следуйте за мной, чтобы узнать больше о прохождении, советах и более крупных проектах с участием стиля React, Node или CSS. Спасибо!
Оригинал: “https://dev.to/uzomezu/react-calculator-app-54ha”