博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redux - example
阅读量:5996 次
发布时间:2019-06-20

本文共 3578 字,大约阅读时间需要 11 分钟。

  hot3.png

Redux Example

Examples from

Counter Vanilla

Run the Counter Vanilla example:

git clone https://github.com/reactjs/redux.gitcd redux/examples/counter-vanillaopen index.html

index.html

      Redux basic example            

Clicked: 0 times

分析:

function counter(state, action) {....} 作为一个函数,通过var store = Redux.createStore(counter) 变成了一个 store。

这个 store的两个参数可以通过store.getState()store.dispatch({ type: 'INCREMENT' })使用,返回值皆为 state。

store.subscribe(callbackFunc) 这个函数用于监听 state的变化,并调用 callbackFunc.

其中 dispatch 函数还可以进行异步调用:

setTimeout(function () {    store.dispatch({ type: 'INCREMENT' })}, 1000)

Counter

Run the Counter example:

git clone https://github.com/reactjs/redux.gitcd redux/examples/counternpm installnpm startopen http://localhost:3000/

项目结构

image

reducers 中 store 函数

export default (state = 0, action) => {  switch (action.type) {    case 'INCREMENT':      return state + 1    case 'DECREMENT':      return state - 1    default:      return state  }}

index.js 中通过 prop传递 store

const render = () => ReactDOM.render(  
store.dispatch({ type: 'INCREMENT' })} onDecrement={() => store.dispatch({ type: 'DECREMENT' })} />, rootEl)

Todos

Run the Todos example:

git clone https://github.com/reactjs/redux.gitcd redux/examples/todosnpm installnpm startopen http://localhost:3000/

项目结构

image

这个例子中 store 不再是一个组件组成,而是由多个组件混合。并且 store中对 action的操作不再仅仅是判断 action.type,还可以获取更多的 action属性。

使用 react-redux 的 Provider 创建一个带有 store的容器

import { createStore } from 'redux'import { Provider } from 'react-redux'import reducer from './reducers'const store = createStore(reducer)render(  
, document.getElementById('root'))

而 App 组件是由3个组件构成

const App = () => (  
)

其中一个组件,调用 dispatch 传递 action函数作为参数。 而通过react-redux 的 connect 组件将其关联到 store上。

import { connect } from 'react-redux'import { addTodo } from '../actions'let AddTodo = ({ dispatch }) => {  let input  return (    
{ e.preventDefault() if (!input.value.trim()) { return } dispatch(addTodo(input.value)) input.value = '' }}>
{ input = node }} />
)}AddTodo = connect()(AddTodo)

TodoMVC

Run the TodoMVC example:

git clone https://github.com/reactjs/redux.gitcd redux/examples/todomvcnpm installnpm startopen http://localhost:3000/

项目结构

image

这个项目跟上个项目并无大致,只不过多了一个 constants。它的作用主要是把字符串变成常量。

Shopping Cart

Run the Shopping Cart example:

git clone https://github.com/reactjs/redux.gitcd redux/examples/shopping-cartnpm installnpm startopen http://localhost:3000/

项目结构

image

使用了 redux-chuck 作中间层,redux-logger 作日志。

import React from 'react'import { render } from 'react-dom'import { createStore, applyMiddleware } from 'redux'import { Provider } from 'react-redux'import { createLogger } from 'redux-logger'import thunk from 'redux-thunk'import reducer from './reducers'import { getAllProducts } from './actions'import App from './containers/App'const middleware = [ thunk ];if (process.env.NODE_ENV !== 'production') {  middleware.push(createLogger());}const store = createStore(  reducer,  applyMiddleware(...middleware))store.dispatch(getAllProducts())render(  
, document.getElementById('root'))

Tree view

Run the Tree View example:

git clone https://github.com/reactjs/redux.gitcd redux/examples/tree-viewnpm installnpm startopen http://localhost:3000/

转载于:https://my.oschina.net/lemos/blog/1510588

你可能感兴趣的文章
oracle自动共享内存管理(ASMM)
查看>>
浅析令人尖叫的趣味编程语言----scratch
查看>>
网络速率方面单位MBPS和MB的区别
查看>>
ACL执行过程
查看>>
自动化运维工具puppet学习笔记之基础篇
查看>>
Oracle12c设置PDB企业管理器登录端口
查看>>
Win03+Sql2005+FreeNAS群集(一)
查看>>
Android懒人库
查看>>
Android 界面中隐藏项目名称
查看>>
mysqldump & binlog做完全备份
查看>>
显存位宽
查看>>
log4j学习链接
查看>>
D3数据绑定函数
查看>>
解决Mysql占用cpu,内存高故障案例
查看>>
iOS Status Bar 状态栏设置汇总
查看>>
鸟哥私房菜重温笔记5
查看>>
.net core 全新的微软跨平台框架
查看>>
ORA-12154 TNScould not resolve the connect identifier specified
查看>>
CGContextRef简单绘制-03饼图、柱状图
查看>>
Know more about Oracle User Space Quota
查看>>