-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用Redux管理你的React应用 #18
Comments
这么好的文章没推广啊 |
真的非常好 |
@denvey 谢谢,写这篇文章的初衷就是想通过用最简单的方式阐明redux的思想及用法。 |
项目运行不了…… |
@wing-kai 刚测试了一下,可以运行的,看看有没有npm install。如果还有什么问题的话,可以加我QQ,527551750。 |
@matthew-sun
运行的时候
我的npm版本是3.3.12 |
@wing-kai 试一下用cnpm |
赞,终于有个能看懂的redux例子了 |
|
@anxsec 赞,已改~ |
@matthew-sun 我的出现了和 @wing-kai一样的问题,怎么解决的啊? |
@zhongning7924 你的node版本是多少呢,我的是4.x |
@matthew-sun 我的是5.x,window系统。 |
@zhongning7924 翻墙安装 或者克隆这个仓库 |
为啥老是安装失败啊;npm install 老是失败。 |
@hichaozjp node版本确认是4.x,npm安装确认用的是cnpm吗 |
@hichaozjp 可以试试 node-sass 安装失败解决方案 |
您好,我是刚学react的菜渣,
但是我这么写以后就报错,store is not define |
@JoeQian2lfy |
@matthew-sun 感谢,我翻了下redux的中文文档已经有了初步认识了。 |
@matthew-sun �本来想提提issue的,但免得打乱了你的文章- - 。。。 |
@Galen-Yip 写ADD_ITEM的目的是用setTimeout模拟异步操作,这里是需要用dispatch派发的 |
@matthew-sun 这里是actionCreator,应该是只做return action
|
@Galen-Yip dispatch是作为参数注入到action里,按照你的方法改会报这个错误,你可以试试 |
@matthew-sun 我明白你的意思,但bindActionCreator传入了dispatch,应该是已经自动去做了dispatch了。按分层而言,理应不应该在action那里面去dispatch吧? 你觉得呢? |
@matthew-sun 再请教一个问题 https://github.com/matthew-sun/redux-example/blob/master/public/app/containers/App.js |
@Galen-Yip 我刚刚打了一下不是空的 |
@laixstx 看下 webpack 吧 |
@laixstx 用webpack --config webpack.config.min.js命令可以打包文件在本地,然后你再发布到生产环境上面 |
好文章。谢谢 |
请问如果initialItems的数据,我想通过AJAX拿下来后再渲染要怎么处理呢? |
@cgygd createStore的第二个参数就是设置Store的初始值,不过要注意,这是设置整个Store树的。 http://cn.redux.js.org/docs/api/createStore.html const Store = compose(
applyMiddleware(thunk, logger)
)(createStore)(rootReducer, initialState);
const Root = (
<Provider store={Store}>
<Body />
</Provider>
); |
我想咨询楼主一个问题,这种技术能不能够应用在erp系统的开发中,对数据的展示,增删改查,数据的即时性等等 |
例子如果升级支持Node 6,并且在Windows10 下也可以跑就好了。 |
写的很棒,支持一下!! |
写的很好,第一遍看的时候很多不懂的地方,研究了很多天,回过头来看,觉得很精彩,很详细,已经在研究中,希望能借此可以真正做项目 |
楼主之前说action里面写上ajax请求,可是如果我初始化的时候,就需要从服务器获取数据呢,在action里面如何去做呢?我看楼主初始化目前给的是一个固定的List,我这边想从数据库去获取值 @matthew-sun 麻烦楼主能抽空给我个答复 |
@ToNiQian 可以在App初始化的时候,在componentDidMount里调用你的获取数据Action |
@matthew-sun 我看了很多文章, 还是搞不清redux 或者直接说flux这个东西, 能不能用一个纯react vs react-redux 的例子来做解释。 |
npm run dev 会报错 |
@ToNiQian webpack command not found,安装一下 |
@ToNiQian 例子项目已经非常老了,很多已经过时了,推荐看下对应的各个官方文档 |
@eaielo webpack本来就已经安装了,npm run start就不会报错,有点蒙圈 |
很棒! |
谢谢! |
谢谢大神! |
package.json里面没有这个包的配置,需要我额外安装最后才正常运行。是否需要补一下? |
@ca7pe 好的,我补一下哈,3q |
为什么npm start后会出现这样的问题? D:\redux-example-master>npm start
events.js:141 Error: listen EADDRINUSE 127.0.0.1:3000 npm ERR! Please include the following file with any support request: |
@yellowfrogCN this example is out of date, recommend to read the redux official document |
看过这篇文章之后,第一次跑通了redux。 |
项目运行不了 |
@zhw2590582 根据这篇文章我创建了一个项目,可以试一下。simple-redux-example |
你好 请问这个filter的作用是什么啊 |
为什么使用React还需要使用别的框架来搭配?
React的核心是使用组件定义界面的表现,是一个View层的前端库,那么在使用React的时候我们通常还需要一套机制去管理组件与组件之间,组件与数据模型之间的通信。
为什么使用Redux?
Facebook官方提出了FLUX思想管理数据流,同时也给出了自己的实现来管理React应用。可是当我打开FLUX的文档时候,繁琐的实现,又臭又长的文档,实在难以让我有使用它的欲望。幸好,社区中和我有类似想法的不在少数,github上也涌现了一批关于实现FLUX的框架,比较出名的有Redux,Reflux,Flummox。
其中Redux的简单和有趣的编程体验是最吸引我的地方。
注:Redux开发调试工具:redux-devtools
React应用无刷新保存工具:react-transform
不明真相的群众,可能这里需要我来安利一下Flux数据流的思想,看图:
大致的过程是这样的,View层不能直接对state进行操作,而需要依赖Actions派发指令来告知Store修改状态,Store接收Actions指令后发生相应的改变,View层同时跟着Store的变化而变化。
举个例子:A组件要使B组件发生变化。首先,A组件需要执行一个Action,告知绑定B组件的Store发生变化,Store接收到派发的指令后改变,那相应的B组件的视图也就发生了改变。假如C,D,E,F组件绑定了和B组件相同的Store,那么C,D,E,F也会跟着变化。
使用React和Redux开发一个小程序
为了更好的描述怎么样使用Redux管理React应用,我做了一个Manage Items的小例子。你可以在这里找到全部的源代码:https://github.com/matthew-sun/redux-example
快速查看
1.git clone git@github.com:matthew-sun/redux-example.git
2.npm install && npm start
3.open localhost:3000
目录结构
Index.js
在入口文件中,我们需要把App和redux建立起联系。Provider是react-redux提供的组件,它的作用是把store和视图绑定在了一起,这里的Store就是那个唯一的State树。当Store发生改变的时候,整个App就可以作出对应的变化。这里的会传进Provider的props.children里。
Constants
keyMirror这个方法非常的有用,它可以帮助我们轻松创建与键值key相等的常量。
Actions
Action向store派发指令,action 函数会返回一个带有 type 属性的 Javascript Plain Object,store将会根据不同的action.type来执行相应的方法。addItem函数的异步操作我使用了一点小技巧,使用redux-thunk中间件去改变dispatch,dispatch是在View层中用bindActionCreators绑定的。使用这个改变的dispatch我们可以向store发送异步的指令。比如说,可以在action中放入向服务端的请求(ajax),也强烈推荐这样去做。
Reducers
Redux有且只有一个State状态树,为了避免这个状态树变得越来越复杂,Redux通过 Reducers来负责管理整个应用的State树,而Reducers可以被分成一个个Reducer。
Reduce在javascript Array的方法中出现过,只是不太常用。简单快速的用代码样例来回顾一下:
回到Redux中来看,整个的状态就相当于从[初始状态]merge一个[action.state]从而得到一个新的状态,随着action的不断传入,不断的得到新的状态的过程。(previousState, action) => newState,注意:任何情况下都不要改变previousState,因为这样View层在比较State的改变时只需要简单比较即可,而避免了深度循环比较。Reducer的数据结构我们可以用immutable-js,这样我们在View层只需要react-immutable-render-mixin插件就可以轻松的跳过更新那些state没有发生改变的组件子树。
连接reducers
Redux提供的combineReducers函数可以帮助我们把reducer组合在一起,这样我们就可以把Reducers拆分成一个个小的Reducer来管理Store了。
Middleware
在Redux中,Middleware 主要是负责改变Store中的dispatch方法,从而能处理不同类型的 action 输入,得到最终的 Javascript Plain Object 形式的 action 对象。
以redux-thunk为例子:
当ThunkMiddleware 判断action传入的是一个函数,就会为该thunk函数补齐dispatch和getState参数,否则,就调用next(action),给后续的Middleware(Middleware 插件可以被绑定多个)得到使用dispatch的机会。
UI
智能组件和木偶组件,因为本文主要是介绍Redux,对这个感兴趣的同学可以看一下这篇文章Smart and Dumb Components。本项目中在结构上会把智能组件放在containers中,木偶组件放于components中。
containers
智能组件,会通过react-redux函数提供的connect函数把state和actions转换为旗下木偶组件所需要的props。
components
木偶组件,各司其职,没有什么关于actions和stores的依赖,拿出项目中也可独立使用,甚至可以和别的actions,stores进行绑定。
调试工具
使用redux-devtools调试,为你在开发过程中带来乐趣。
在你的代码中加上上面的两段代码,运行npm run debug命令,就可以用调试工具来管理你的项目了。
延伸阅读
写在最后
刚接触到Redux和React技术的时候,我几乎是夜夜难以入眠的,技术革新带来的新的思想总是不断的刺激着我的大脑。非常建议你也能来试试Redux,体会我在开发中得到的这种幸福感。
如果有任何想要了解的,欢迎来我的github和我一起互动交流。
The text was updated successfully, but these errors were encountered: