[一步一步学react系列] 04—计算器Demo

前言:
之前的例子都是写的计数器,加一减一的功能,我们大致弄懂了redux分层和store数据管理,下面我们将结合现有知识写一个终极版的计算器。以此巩固所学知识
知识点:redux分层,react-router,一些算法及数据结构知识[栈 + 中缀转后缀]

首段祭出源码地址:
github:https://github.com/EmilyYoung71415/LearnReactDemo

效果图

这里写图片描述

项目结构

├──redux-demo/                 * 计算器Demo
      |
      |————src/                * 主程序
            │
            ├─Components       * 所有组件 
            │  ├─Calculator    * 计算器
            │  ├─Counter       * 计数器 
            │  └─StudyDemos    * 学习的一些有帮助的demo 
            │      └─备份文件夹 * 笔记 等我写完博客就清 
            ├─Error            * 错误组件 
            ├─Redux            * Redux 
            │  ├─Action
            │  ├─Containers
            │  ├─Reducer
            │  └─Store
            ├─Router           * 路由
            └─Style            * 所有样式变量 

为了便于初学者如我上手,我没有将分层的各个功能部件写在不同的文件下,而是采用了先写在一起然后分成多个文件的策略。如下是我的计算器代码,并没有加路由。
思路是:
1.布局:按钮值是数组,循环数组值生成按钮,一个函数监听所有的点击事件。flex布局,固定每行几个块。
2.确定当前实例中拥有的所有数据,接下来在这些数据中找出应该是state的数据。
即:在当前实例[计算器]中的所有数据,确定哪些是本组件内部管理的无需存到store上的数据。
也就是确定props数据与state数据。
props数据与state数据划分遵循三原则
1. 是否是通过父级props传来的,如果是则可能不是state
2. 会随时间推移而不变吗? 如果是则可能不是state
3. 你能根据组件中其他任何的state或者props计算出他吗?如果能,则可能不是state

由上推理:

  • 等号及等号前的数据: 通过用户的输入而来 会随时间推移而变 state
  • 等号后的数据: 能够计算得出
  • 按钮的值: 来源于父级props层层传递而来

综上我们可以得到属于本组件state状态的数据是:等号及等号前的数据
而每次计算的结果我们则存到redux的store里。即结果来源于props。
关于结果:
我们对应一个方法和一个参数

  • 方法:等于符号的点击 equalClick => 负责向外分发action
  • 参数: revdata 结果值 =>继承自strore,this.props.revdata

难点解说: http://www.xiexianbo.xin/wordpress/?p=519

源码解读:


                
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
下面是一个简单的计算器示例,使用 React 实现: ```jsx import React, { useState } from 'react'; function Calculator() { const [result, setResult] = useState(''); function handleClick(event) { setResult(result.concat(event.target.name)); } function calculate() { try { setResult(eval(result).toString()); } catch (error) { setResult('Error'); } } function clear() { setResult(''); } return ( <div className="calculator"> <input type="text" value={result} /> <div className="keys"> <button name="1" onClick={handleClick}>1</button> <button name="2" onClick={handleClick}>2</button> <button name="3" onClick={handleClick}>3</button> <button name="+" onClick={handleClick}>+</button> <button name="4" onClick={handleClick}>4</button> <button name="5" onClick={handleClick}>5</button> <button name="6" onClick={handleClick}>6</button> <button name="-" onClick={handleClick}>-</button> <button name="7" onClick={handleClick}>7</button> <button name="8" onClick={handleClick}>8</button> <button name="9" onClick={handleClick}>9</button> <button name="*" onClick={handleClick}>*</button> <button name="." onClick={handleClick}>.</button> <button name="0" onClick={handleClick}>0</button> <button name="/" onClick={handleClick}>/</button> <button className="clear" onClick={clear}>Clear</button> <button className="equal" onClick={calculate}>=</button> </div> </div> ); } export default Calculator; ``` 在这个计算器中,我们使用了 React 的 `useState` 钩子来管理结果的状态。当用户按下数字或运算符按钮时,我们将其添加到结果字符串中。当用户按下“Clear”按钮时,我们将结果字符串设置为空字符串。当用户按下“=”按钮时,我们使用 `eval()` 函数计算结果,并将其设置为结果字符串。 这个简单的计算器可以通过 CSS 来美化和布局,以使其看起来更像一个实际的计算器
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值