当前位置: 首页 > news >正文

邯郸市三建建筑公司网址网站推广优化网址

邯郸市三建建筑公司网址,网站推广优化网址,辽宁省建设工程信息网官网新系统,网上做调查网站React 基础巩固(三十二)——Redux的三大原则 一、Redux的三大原则 单一数据源 整个应用程序的state被存储在一颗object tree 中,并且这个object tree 只存储在一个store中;Redux并没有强制让我们不能创建多个Store,但是那样做不利于数据维护…

React 基础巩固(三十二)——Redux的三大原则

一、Redux的三大原则

  1. 单一数据源

    • 整个应用程序的state被存储在一颗object tree 中,并且这个object tree 只存储在一个store中;
    • Redux并没有强制让我们不能创建多个Store,但是那样做不利于数据维护;
    • 单一的数据源可以让整个应用程序的state变得方便维护、追踪、修改;
  2. State是只读的

    • 唯一修改State的方法一定是触发action,不要试图在其他地方通过任何的方式来修改State;

    • 这样就确保了View或网络请求都不能直接修改state,它们只能通过action来描述自己想要如何修改state;

    • 这样可以保证所有的修改都被集中化处理,并且按照严格的顺序来执行,所以不需要担心reace condition(竞态)的问题;

  3. 使用纯函数来执行修改

    • 通过reducer将旧state和actions联系在一起,并且返回一个新的state;
    • 随着应用程序的复杂度增加,我们可以将reducer拆分成多个小的reducers,分别操作不同state tree 的一部分;
    • 但是所有的reducer都应该是纯函数,不能产生任何的副作用;

二、Redux的使用流程

在这里插入图片描述

三、Redux的基本使用(计数器小案例)

  1. 构建react项目

    # 创建新的react项目
    create-react-app redux-learn
    # 创建成功后cd进入文件夹,随后安装redux
    npm install redux
    
  2. 删除暂时无关文件,构建store相关文件,并引用store至所需页面中

    • 目录

在这里插入图片描述

  • store/constants.js

    export const ADD_NUMBER = "add_number";
    export const SUB_NUMBER = "sub_number";
    
  • store/reducer.js

    import * as actionTypes from "./constants";const initialState = {counter: 111,
    };function reducer(state = initialState, action) {switch (action.type) {case actionTypes.ADD_NUMBER:return { ...state, counter: state.counter + action.num };case actionTypes.SUB_NUMBER:return { ...state, counter: state.counter - action.num };default:return state;}
    }export default reducer;
  • store/actionCreators.js

    import * as actionTypes from "./constants";export const addNumberAction = (num) => ({type: actionTypes.ADD_NUMBER,num,
    });export const subNumberAction = (num) => ({type: actionTypes.SUB_NUMBER,num,
    });
  • store/index.js

    import { createStore } from "redux";
    import reducer from "./reducer";const store = createStore(reducer);export default store;
  • pages/home.jsx

    import React, { PureComponent } from "react";
    import store from "../store";
    import { addNumberAction } from "../store/actionCreators";
    export class home extends PureComponent {constructor() {super();this.state = {counter: store.getState().counter,};}componentDidMount() {store.subscribe(() => {const state = store.getState();this.setState({counter: state.counter,});});}addNumber(num) {store.dispatch(addNumberAction(num));}render() {const { counter } = this.state;return (<div>home counter:{counter}<div><button onClick={(e) => this.addNumber(1)}>+1</button><button onClick={(e) => this.addNumber(5)}>+5</button><button onClick={(e) => this.addNumber(8)}>+8</button></div></div>);}
    }export default home;
  • pages/profile.jsx

    import React, { PureComponent } from "react";
    import store from "../store";
    import { subNumberAction } from "../store/actionCreators";
    export class profile extends PureComponent {constructor() {super();this.state = {counter: store.getState().counter,};}componentDidMount() {store.subscribe(() => {const state = store.getState();this.setState({counter: state.counter,});});}subNumber(num) {store.dispatch(subNumberAction(num));}render() {const { counter } = this.state;return (<div>profile counter:{counter}<div><button onClick={(e) => this.subNumber(1)}>-1</button><button onClick={(e) => this.subNumber(5)}>-5</button><button onClick={(e) => this.subNumber(8)}>-8</button></div></div>);}
    }export default profile;
  • App.jsx

    import React, { PureComponent } from "react";
    import Home from "./pages/home";
    import Profile from "./pages/profile";
    import "./style.css";
    import store from "./store";export class App extends PureComponent {constructor() {super();this.state = {counter: store.getState().counter,};}componentDidMount() {store.subscribe(() => {const state = store.getState();this.setState({counter: state.counter,});});}render() {const { counter } = this.state;return (<div><h2>App Counter: {counter}</h2><div className="pages"><Home /><Profile /></div></div>);}
    }export default App;
  1. 运行结果
    在这里插入图片描述

至此,代码仍较为复杂,代码将在React 基础巩固(三十三)中得到优化

http://www.ds6.com.cn/news/46670.html

相关文章:

  • 做阿里巴巴网站多少钱数字营销策划
  • 加强网站信息内容建设网络营销推广策划的步骤是什么
  • 锡盟建设工程造价工程管理网站站长工具seo综合查询推广
  • 电子商务网站建设实战站长工具seo综合查询columbu cat
  • 有关网站排名的论文免费建站的网站
  • 对网站建设的要求app软件推广怎么做
  • 关于动态网站开发的论文流量大的推广平台有哪些
  • 山东网站建设都有那些传统营销与网络营销的区别
  • 网站开发导航栏夫唯seo教程
  • 承德公司网站建设目前较好的crm系统
  • 怎么做企业网站搜索优化网络推广
  • 吴志国网站建设工作室搜狗推广登录
  • 佳木斯网站建设哪家好苏州百度搜索排名优化
  • 怎么推广自己的公司网站自动友链网
  • 匿名ip访问网站受限网络营销有哪些模式
  • 网站建设公司怎样做账网站设计公司建设网站
  • 自己做的网站能放到阿里云上网络营销的五个发展阶段
  • 政府网站建设情况工作报告必应搜索国际版
  • 医疗网站建设案例百度seo培训
  • 腾讯云申请域名抖音seo是什么
  • 常熟网站建设书生商友什么是百度竞价
  • 购物网站的首页是静态网站推广的基本方法有哪些
  • 最专业的网站建设团队合肥推广外包公司
  • 淄博seo网站排名优化产品推广文案100字
  • 建设企业网站地址seo推广软件品牌
  • 产品做推广一般上什么网站网络营销课程心得体会
  • 网站开发后的经验总结百度权重10的网站
  • 免费真人做爰网站希爱力双效片用后感受
  • 解决方案网站排名百度关键词搜索怎么弄
  • 重庆做网站公司排名seo项目分析