核心提示:1.环境搭建和vue一样,react也有脚手架: create-react-app我们将在这上面进行开发脚手架安装:npm install -g create-react-appcreate-reac...
1.环境搭建
和vue一样,react也有脚手架: create-react-app
我们将在这上面进行开发
脚手架安装:
npm install -g create-react-app create-react-app my-app cd my-app
生成的目录结构:
my-app/ README.md node_modules/ package.json .gitignore public/ favicon.ico index.html src/ App.css App.js //模板文件 App.test.js index.css index.js //挂载点 logo.svg
如上我们主要动index.js 和App.js
运行程序:
npm start
2.开始计数器demo
接下来我们在App.js写下:
//App.js import React, {Component} from 'react'; //【3】.根据传来的不同action标识判断应该做出的反应。 //如action的type为INCREMENT时,那么做出的反应就是计算某值, //并将该值返回做为一个新的state //reducer const counter = (state = { value: 0 }, action) => { switch (action.type) { case 'INCREMENT': return { value: state.value + 1 }; case 'DECREMENT': return { value: state.value - 1 }; default: return state; } } class MyCounter01 extends Component { // State 初始化数据state状态 constructor() { super(); this.state = counter(undefined,{}); } //【2】.dispatch调用counter函数【即reducer】, //参数:数据当前的状态state和action动作(该action动作以type字段为标识) dispatch(action) { //【4】.以reducer返回的新state更新状态,通过this.setState方法修改状态值 this.setState(prevState => counter(prevState, action)); } // Actions increment = () => { this.dispatch({ type: 'INCREMENT' }); }; decrement = () => { this.dispatch({ type: 'DECREMENT' }); }; //view层 render() { return ( <p> <p>{this.state.value}</p> //【1】. 用户点击加按钮,触发this.increment函数【即action】 //函数通过 this.dispatch发出action,告诉数据你应该要发生变化啦 <button onClick={this.increment}>+</button> <button onClick={this.decrement}>-</button> </p> ) } } export default MyCounter01;
代码中标的1234点就是以下工作流的具体实施过程。
本节中只需要理解
和以往的点击函数实现加减不同,react明显多了两个跳板,一步一步渐进的完成整个动作。
action状态:根据用户的操作事件分发(dispatch)动作(action),每个动作由type标识
reducer:将收到的状态分流,规定某个状态对应数据的怎么变化,并返回一个新数据state
具体根据数据变化更新数据的:this.setState()