1.index.js文件中需要引入

a.React(把jsx编译到js需要调用一个函数, 这个函数在React叫React.createElement. 解答地址:https://segmentfault.com/q/1010000011479561,注意后面评论,查看ES6-Module),

b.ReactDOM,

c.要渲染的总组件。

示例如下:

//index.js
import React from "react";
import ReactDOM from 'react-dom';
import App from "./page/todoListRedux/app"
ReactDOM.render(<App />,document.getElementById("root"))

2.总组件中需要引入

a.React,{Component,Fragment}(Fragment页面不会渲染的包含块)

b.引入store所在位置

c.{Provider}:相当于store所作用的范围容器

d.子组件所在位置

并将总组件暴露给index

示例如下:

//app.js
import React, { Component, Fragment } from "react";
import store from "./store/store";
import { Provider } from "react-redux"; import Input from "./component/input"; export default class App extends Component {
render() {
return (
<Provider store={store}>
<Fragment>
<Input />
</Fragment>
</Provider>
)
}
}

3.store.js中需要引入

a.创建store的方法{createStore}

b.对redux的dispacth方法进行封装的方法applyMiddleware

c.rudecer(设计数据结构和actions处理)

d.thunk 实现异步action

将store暴露给总组件app.js

代码示例如下:

import { createStore, applyMiddleware } from "redux";
import reducers from "./reducers";
// import logger from "redux-logger";
import thunk from "redux-thunk"; // console.log(logger,thunk)
// import { addTodo,changeCompleted } from "./actions"
// redux-thunk实现异步action
// redux-logger是redux得日志中间件
const store = createStore(reducers,applyMiddleware(thunk))
export default store

4.actions.js

a.用变量代替action字符串

b.action接收的参数返回出去,传递给reducers

c.将action暴露给子组件(即:用户具体的操作行为)

示例如下:

export const ADD_TODO = "ADD_TODO";
export function addTodoAction({id,text}) {
return {
type: ADD_TODO,
text,
id
}
}

5.reduers.js

a.引入合并处理action方法的方法:combineReducers

b.定义state数据结构

c.定义function,根据用户操作,dispatch过来的action中的type对state数据中的具体的数据进行操作

d.合并function,将其放入reducers(注:只有合并以后的function在子组件中才能获取到)

e.将reducers暴露给store

代码示例如下:

import { combineReducers } from "redux";
const initdata = {
todoList: [{
id: 0,
text: "HTML",
completed: true
}, {
id: 1,
text: "CSS",
completed: false
}, {
id: 2,
text: "JS",
completed: true
}, {
id: 3,
text: "NodeJs",
completed: false
}],
id:4,
showType:"All"
}
function todoList(state=initdata.todoList,action){
// console.log(action)
let newArr=JSON.parse(JSON.stringify(state))
if(action.type==="ADD_TODO"){
newArr.push({
id:action.id,
text:action.text,
completed:false
})
}else if(action.type==="COMPLETED_TODO"){
newArr.map((item)=>{
if(item.id===action.id){
item.completed=!item.completed
}
return item
})
}
return newArr
}
const reducers=combineReducers({
todoList,id,showType
})
export default reducers;

6.子组件

a.引入React,{Component}

b.引入connect(连接ruducers里面的数据)

c.引入actions.js中的用户操作行为方法

d.定义组件名称,从this.props中获取自己需要的方法/数据(或参数),并根据用户行为触发不同的action,通过dispatch来对数据进行相应操作

e.连接reducers,并从中获取需要的数据放入this.props中

代码示例如下:

import React, { Component, Fragment } from "react";
import {connect} from "react-redux";
import styles from "../static/style.css"
import {changeCompleted} from "../store/actions" class List extends Component { render() {
const {dispatch,showType}=this.props
let list=this.props.todoList.filter((item)=>{
if(showType==="All"){
return item
}else if(showType==="WillDo"){
return item.completed===false
}else if(showType==="Did"){
return item.completed===true
}
})
return (
<Fragment>
<ul>
{
list.map((item,index)=>{
return <li key={index}
className={styles[item.completed?'active':""]}
onClick={()=>{
// console.log(item.id)
dispatch(changeCompleted(item.id))
}}
>{item.text}</li>
})
}
</ul>
</Fragment>
)
}
}
export default connect(function(state){
return state
})(List)

初步总结:react-redux的初步使用体验

github:https://github.com/aliAjax/reactTodoListReduxDemo.git

包含了不用redux的todoList Demo

react-redux学习初步总结的更多相关文章

  1. React Redux学习笔记

    React Router React Router 使用教程 Redux中间件middleware [译]深入浅出Redux中间件 Redux学习之一:何为middleware? ES6 ES6新特性 ...

  2. React+Redux学习笔记:React+Redux简易开发步骤

    前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...

  3. react redux学习之路

    React 自学 chapter one React新的前端思维方式 React的首要思想是通过组件(Component)来开发应用.所谓组件,简单说,指的是能够完成某个特定功能的独立的.可重用的代码 ...

  4. react与redux学习资料的整理

    **重点内容**React学习 1.新手入门可以访问react的官方网站,如果英语不是特别好的同学可以访问中文版的,具体链接http://reactjs.cn/react/index.html 首页有 ...

  5. Redux学习(3) ----- 结合React使用

    Redux 和React 进行结合, 就是用React 做UI, 因为Redux中定义了state,并且定义了改变或获取state的方法,完全可以用来进行状态管理,React中就不用保存状态了,它只要 ...

  6. react/redux组件库、模板、学习教程

    开源的有蚂蚁金服的: 1.https://pro.ant.design/index-cn 2.https://pro.ant.design/docs/getting-started-cn 3.http ...

  7. redux学习

    redux学习: 1.应用只有一个store,用于保存整个应用的所有的状态数据信息,即state,一个state对应一个页面的所需信息 注意:他只负责保存state,接收action, 从store. ...

  8. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  9. react+redux官方实例TODO从最简单的入门(6)-- 完结

    通过实现了增-->删-->改-->查,对react结合redux的机制差不多已经了解,那么把剩下的功能一起完成吧 全选 1.声明状态,这个是全选状态 2.action约定 3.red ...

  10. react+redux官方实例TODO从最简单的入门(1)-- 前言

    刚进公司的时候,一点react不会,有一个需求要改,重构页面!!!完全懵逼,一点不知道怎么办!然后就去官方文档,花了一周时间,就纯react实现了页面重构,总体来说,react还是比较简单的,由于当初 ...

随机推荐

  1. 安卓开发之sql语句增删改查2(利用谷歌封装好的API进行增删改查)

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  2. Java秒杀实战 (七)安全优化

    转自:https://blog.csdn.net/qq_41305266/article/details/81174782 一.隐藏秒杀地址 思路:秒杀开始前,先去请求接口获取秒杀地址 1.接口改造, ...

  3. python实现蓝牙通信

    安装和示例 linux下安装 -dev sudo pip install bluepy 官方示例 import btle class MyDelegate(btle.DefaultDelegate): ...

  4. TTP223 触摸按键

    正面 反面 模式设置 可替代按键开关

  5. Oracle问题总结

    1.账号锁定了 2.忘记密码 3.Oracle create session权利 4.oracle中单引号和双引号的作用 5.不支持 insert into tableName values (... ...

  6. 30K以上的高薪Java程序员所需技能大汇总

    总所周知,Java是目前使用最为广泛的网络编程语言之一. 它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点. 一般的JAVA程序员或许只需知道一些JAVA的语法结构就可以应付了.但要 ...

  7. 安全开发Java动态代理

    关于安全开发的一些思考 之前面试某宝的时候,某人问过我,如果解决开发不懂安全的问题,就比如说SSRF,XEE这样的漏洞,如果一旦发生,应该如果立刻去响应,并帮助开发人员修复漏洞,难道写一个jar包?然 ...

  8. 作业九——DFA最小化

    1.将DFA最小化:教材P65 第9题 I {1, 2, 3, 4, 5} {6, 7} {1, 2}b->{1, 2, 3, 4, 5} {3, 4}b->{6, 7} {5}b-> ...

  9. 使用Tarjan进行缩点(有向图)

    int From[maxn], Laxt[maxn], To[maxn << 2], Next[maxn << 2], cnt; int low[maxn], dfn[maxn ...

  10. SQL查询CASE遇上NULL怎么办?

    原SQL: case userName when  null THEN '空' else '有值' end, 这种写法不好使: 换一种:case when userName is null THEN ...