摘要:之前写了一篇没有加入的的小博文。一拆分结构根据自己的习惯和固定套路,拆分目录结构和组件结构。把的导航组件集中放在纯粹是个人习惯。二代码实现入口文件是用来做的数据持久化。添加事项后要通知其他组件更新数据。
读前须知
这个项目是第一次使用Redux的实例,并不具有专业性的理论知识。纯粹分享一次开发过程与心得。之前写了一篇没有加入Redux的React Native ToDoList的小博文。这个项目也是在原来的基础上进行装修完成的。目的是为了体验一下高深莫测的Redux。
总之,在各位网友的友情支持下,我依然没有看懂redux数据流的走向,勉勉强强通了一点。
根据自己的习惯和固定套路,拆分目录结构和组件结构。
├── public ├── todos-redux │ ├── actions │ │ └── index.js │ ├── components │ │ ├── todoItem.js │ │ └── todoList.js │ ├── containers │ │ ├── add.js │ │ ├── all.js │ │ ├── completed.js │ │ └── incomplete.js │ ├── reducers │ │ ├── index.js │ │ └── todos.js │ ├── store │ │ └── configureStore.js │ ├── utils │ │ └── utils.js │ ├── index.js │ ├── router.js
把react-navigation的导航组件集中放在router.js纯粹是个人习惯。
components中的组件是展示组件,不直接使用Redux。而containers中的是直接使用 Redux的组件。在这里可以看成components是containers的子组件。
redux-persist是用来做redux的数据持久化。使用方法直接参考在GitHub上的基本示例。这里的代码基本上都是固定套路。
// index.js import React, {Component} from "react" import { Provider } from "react-redux" import { TodosReduxStack } from "./router" import { PersistGate } from "redux-persist/integration/react" import configureStore from "./store/configureStore" const { persistor, store } = configureStore() export default class TodolistRedux extends Component { render(){ return (创建Action) } }
// action/index.js import Utils from "../utils/utils" export const addTodo = (text) => { return { type: "ADD_TODO", id: Utils.uniqueId(), content: text } } export const toggleTodo = (id) => { return{ type:"TOGGLE_TODO", id } }Reducers
// reducers/todos.js var initState = []; const todos = (state = initState, action)=>{ switch(action.type){ case "ADD_TODO": return[ ...state, { id: action.id, content: action.content, completed: false } ] case "TOGGLE_TODO": return state.map((t) => { if (t.id !== action.id) { return t } return Object.assign({},t,{completed:!t.completed}) }) default: return state } } export default todos容器组件
connect()() 这个写法叫函数的柯里化,涨知识啦。
// containers/all.js const mapStateToprops = (state) => { return { todos: state.todos } } const mapDispatchToProps = (dispatch) =>{ return { onTodoClick: (id) => { dispatch(toggleTodo(id)) } } } export default connect(mapStateToprops, mapDispatchToProps)(AllScreen)
使用filter函数过滤数组,返回指定的值,这个地方有点鸡肋哈,但是我不会其他的写法了。
// containers/completed.js const mapStateToprops = (state) => { return { todos: state.todos.filter(t => t.completed) } }(三)使用Redux前后对比
没有使用Redux之前,项目使用了React Native内置的DeviceEventEmitter方法。添加事项后要通知其他组件更新数据。还大量使用了AsyncStorage做数据的持久化,每一次的数据更新都需要用到它。如果是在稍复杂的项目中这样写,会死翘翘的!使用Redux 和 redux-persist 可以轻松实现这个功能,效果是明显的。在已完成页面将事项切换为未完成,该事项会直接消失,跑到未完成页面中,这个地方并不需要做额外的处理。
说在后面的话这种连个图都没有也没有深入讲解redux的文字都敢发出来,真的是表脸 (手动滑稽)。
完整的项目在这里GitHub Todos Redux。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/97908.html
摘要:而函数式编程就不一样了,这是模仿我们人类的思维方式发明出来的。数据流在中,数据的流动是单向的,即从父节点传递到子节点。数据流严格的单向数据流是架构的设计核心。 前言 总括: 本文采用react+redux+react-router+less+es6+webpack,以实现一个简易备忘录(todolist)为例尽可能全面的讲述使用react全家桶实现一个完整应用的过程。 代码地址:Re...
摘要:框架的使用详解及教程在前段时间,我们也学习讲解过框架的基本使用,但是有很多同学在交流群里给我的反馈信息说,框架理解上有难度,看了之后还是一脸懵逼不知道如何下手,很多同学就转向选择使用框架。 dva框架的使用详解及Demo教程 在前段时间,我们也学习讲解过Redux框架的基本使用,但是有很多同学在交流群里给我的反馈信息说,redux框架理解上有难度,看了之后还是一脸懵逼不知道如何下手,很...
摘要:用来进行组件间通讯地址疑惑之前在做项目的时候,一直会遇到一个困扰我的问题,两个互相独立的子组件如何通讯假设现在结构如下是一个组件,里面有一个删除操作,点击添加备注时会弹出模态框,让用户进行填写。 用Redux来进行组件间通讯 demo地址 疑惑 之前在做项目的时候,一直会遇到一个困扰我的问题,两个互相独立的子组件如何通讯? 假设现在结构如下 showImg(https://segmen...
阅读 4080·2021-10-08 10:04
阅读 3062·2021-08-11 11:20
阅读 2734·2021-07-25 21:37
阅读 2683·2019-08-30 12:44
阅读 2309·2019-08-30 11:12
阅读 1316·2019-08-26 13:45
阅读 2340·2019-08-26 11:53
阅读 3060·2019-08-26 11:32