【前端知识】React 基础巩固(三十一)——store数据的订阅和Redux的优化

这篇具有很好参考价值的文章主要介绍了【前端知识】React 基础巩固(三十一)——store数据的订阅和Redux的优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

React 基础巩固(三十一)——store数据的订阅和Redux的优化

一、store数据的订阅

  1. store/index.js

    const { createStore } = require("redux");
    
    // 初始化数据
    const initialState = {
      name: "test",
      title: "hello redux",
    };
    
    function reducer(state = initialState, action) {
      // 采用switch 替代 if  
      switch (action.type) {
        case "change_name":
          return {
            ...state,
            name: action.name,
          };
        // case / return
        default:
          return state;
      }
    }
    
    // 创建的store
    const store = createStore(reducer);
    
    module.exports = store;
    
    
  2. test.js

    const store = require("./store");
    
    // 采用订阅方式
    const unsubscribe = store.subscribe(() => {
      console.log("subscribe:", store.getState());
    });
    
    // 使用action修改store中的数据
    store.dispatch({
      type: "change_name",
      name: "change name test",
    });
    
    store.dispatch({
      type: "change_name",
      name: "change name test111",
    });
    
    unsubscribe();
    
    

二、Redux的优化

  • redux代码优化:
    1. 将派发的action生成过程放到一个actionCreators函数中
    2. 将定义的所有actionCreators的函数,放到一个独立的文件中:actionCreators.js
    3. actionCreators 和 reducer 函数中使用字符串常量是一致的,所以将常量抽取到一个独立的constants.js文件中
    4. 将reducer和默认值(initialState)放到一个独立的reducer.js文件中
  1. test.js

    const store = require("./store");
    const { changeNameAction } = require("./store/actionCreators");
    
    // 采用订阅方式
    const unsubscribe = store.subscribe(() => {
      console.log("subscribe:", store.getState());
    });
    
    // 使用action修改store中的数据
    store.dispatch(changeNameAction("change name test"));
    
    store.dispatch(changeNameAction("change name test111"));
    
    unsubscribe();
    
    
  2. store/index.js

    const { createStore } = require("redux");
    const reducer = require("./reducer")
    
    // 创建的store
    const store = createStore(reducer);
    
    module.exports = store;
    
    
    
  3. store/actionCreators.js

    const { CHANGE_NAME } = require("./constants");
    // actionCreators: 帮助我们创建action
    
    const changeNameAction = (name) => {
      return {
        type: CHANGE_NAME,
        name,
      };
    };
    
    module.exports = {
      changeNameAction,
    };
    
    
  4. store/constants.js

    const CHANGE_NAME = "change_name";
    
    module.exports = {
      CHANGE_NAME,
    };
    
    
  5. store/reducer.js

    const { CHANGE_NAME } = require("./constants");
    
    // 初始化数据
    const initialState = {
      name: "test",
      title: "hello redux",
    };
    
    // 定义reducer函数:纯函数
    // 两个参数:
    // 1.store中上一次的值;
    // 2.本次需要更新的action
    // 返回值:它的返回值会作为sto re之后存储的state
    function reducer(state = initialState, action) {
      console.log("reducer:", state, action);
      // 有新数据进行更新的时候,那么返回一个新的state
      switch (action.type) {
        case CHANGE_NAME:
          return {
            ...state,
            name: action.name,
          };
        // case / return
        default:
          return state;
      }
    
      // 若没有新数据更新,返回之前的state
      // return state;
    }
    
    module.exports = reducer;
    
    
  6. 运行结果
    【前端知识】React 基础巩固(三十一)——store数据的订阅和Redux的优化,前端知识,React,前端,react.js,javascript文章来源地址https://www.toymoban.com/news/detail-611621.html

到了这里,关于【前端知识】React 基础巩固(三十一)——store数据的订阅和Redux的优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端知识】React 基础巩固(三十六)——RTK中的异步操作

    引入RTK中的createAsyncThunk,在extraReducers中监听执行状态 在界面中引入所需的异步操作Action 查看运行结果 extraReducer还可以传入一个函数,函数接受一个builder参数: 查看运行结果,与之前的写法结果一致

    2024年02月15日
    浏览(34)
  • 【前端知识】React 基础巩固(三十九)——React-Router的基本使用

    Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件。 Router包括两个API: BrowserRouter使用history模式 HashRouter使用hash模式(路径后面带有#号) 尝试在项目中使用HashRouter: 安装Router 在 index.js 中引入并使用HashRouter Routes:包裹所有的Route,在其中匹配一个路由(

    2024年02月14日
    浏览(40)
  • 【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化

    通过组件的生命周期来完成网络请求,网络请求的异步代码直接放在组件中 通过redux来管理异步网络请求 在store中引入中间件 redux-thunk 构建 fetchHomeMultidataAction ,将原本在组件中的异步请求代码放入到actionCreators.js中 改写原来的category.jsx,派发异步请求的dispatch 查看运行结果

    2024年02月15日
    浏览(47)
  • 【前端知识】React 基础巩固(三十二)——Redux的三大原则、使用流程及实践

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

    2024年02月15日
    浏览(42)
  • 【前端知识】React 基础巩固(四十一)——手动路由跳转、参数传递及路由配置

    利用 useNavigate 封装一个 withRouter(hoc/with_router.js) 添加到hoc/index.js文件中 利用withRouter,拦截Home组件,实现手动跳转路由 路由参数传递包括:1.动态路由传参;2.查询字符串传参 改造withRouter,通过 useParams() 和 useSearchParams() 来接收两种参数传递: 在界面中,通过params来接收

    2024年02月14日
    浏览(37)
  • 【前端知识】React 基础巩固(三十八)——log、thunk、applyMiddleware中间件的核心代码

    利用Monkey Patching,修改原有的程序逻辑,在调用dispatch的过程中,通过dispatchAndLog实现日志打印功能 redux中利用中间件 redux-thunk 可以让dispatch不不仅能处理对象,还能处理函数 单个调用函数来应用中间件,非常不方便,封装一个函数来合并中间件 在store/index.js中应用上面三个

    2024年02月14日
    浏览(34)
  • 【前端知识】React 基础巩固(十三)——列表渲染

    在 React 中没有像 Vue 模块语法中的 v-for 指令,而是需要我们通过 JS 代码的方式组织数据,转成 JSX 在 React 中,展示列表最多的方式就是使用数组的 map 高阶函数 在展示数组前,有时会进行一些处理 过滤一些内容(filter 函数) 截取数组中的一部分内容(slice 函数) 列表中的

    2024年02月10日
    浏览(36)
  • 【前端知识】React 基础巩固(四十)——Navigate导航

    新建Login页面,在Login中引入Navigate,实现点击登陆按钮跳转至 /home 路径下: 当路由均无匹配时,通过Navigate跳转至NotFound界面,其中 * 为通配符: 构建NotFound.jsx 在App.jsx中配置NotFound: 构建Home的子路由页面: HomeRecommend.jsx HomeRanking.jsx 利用 Route 嵌套子路由,实现Home页面下的

    2024年02月14日
    浏览(40)
  • 【前端知识】React 基础巩固(二十七)——Fragment

    Fragment 允许将子列表分组,而无需向 DOM 添加额外节点 可以采用语法糖 / 来替代 Fragment,但在需要添加 key 的场景下不能使用此短语 查看Fragment应用后的效果

    2024年02月16日
    浏览(38)
  • 【前端知识】React 基础巩固(二十八)——StrictMode

    StrictMode 是一个用来突出显示应用程序中潜在问题的工具 与 Fragment 一样,StrictMode 不会渲染任何可见的 UI 为后代出发额外的检测和警告 严格模式检查仅在开发模式下运行,不影响生产构建 严格模式检查什么? 识别不安全的生命周期 使用过时的 ref API 检查意外的副作用 组件

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包