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

最新文章

  1. 数论 UVA 10791
  2. Linux系统安全保护措施
  3. 《PHP Manual》阅读笔记2
  4. 注册asp.net 4.0 到iis
  5. Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
  6. JSon_零基础_004_将Set集合对象转换为JSon格式的对象字符串,返回给界面
  7. [linux]BASH 的基本语法
  8. js 阻止冒泡 兼容性方法
  9. UVa (二分) 11627 Slalom
  10. delphi Edit - TActionList
  11. struts2文件下载 火狐浏览器的文件名乱码问题
  12. HttpServletRequest对象方法的用法(转)
  13. js面向对象的三大特性
  14. win7问题解决,凭据管理器和无法访问,不允许一个用户使用一个以上用户名与服务器或共享资源进行多重连接。
  15. 记2014“蓝桥杯全国软件大赛&amp;quot;决赛北京之行
  16. Ricequant-米筐金工-估值因子
  17. 网站开发进阶(三十一)js如何将html表格导出为excel文件(后记)
  18. java工作流引擎Jflow流程事件和流程节点事件设置
  19. MySQL中 in和exists的区别
  20. windows 系统纯净版官网下载地址

热门文章

  1. [NOIP10.6模拟赛]1.merchant题解--思维+二分
  2. React的性能优化
  3. 转 Git使用教程,最详细,最傻瓜,最浅显,真正手把手教
  4. STM32L1xx——ADC(中断/DMA)样例代码
  5. 车钥匙开关上找不到+24V的问题 - 岱峰 - DGY90
  6. Educational Codeforces Round 40 G. Castle Defense (二分+滑动数组+greedy)
  7. hdu4786 Fibonacci Tree[最小生成树]【结论题】
  8. WinForm DevExpress使用之ChartControl控件绘制图表二——进阶
  9. 大数据结构设计V1.0
  10. 单例模式(Singleton)---创建型