对此,我并不想多谈关于React 的任何东西,我仅仅是喜欢UI层新的实现方式,而React本身就很好,因为它颠覆了传统的实现风格。
显然,你想从我这里获取更多关于React、 React Native 更多信息,你一定会失望。因为,没有比去它们的官方网站获取信息更高效的方式了。
Redux 是 Flux 架构风格的进一步实现。 它是一个基于JavaScript的 state container。所以,Redux 非常适用于用来托管 React Component 的状态,而不是让 State Initialize、State Update充斥 在应用程序的每个角落。这就是Flux风格,一个好的状态管理容器不仅能让你的 codebase 更加的清爽,更重要的是让 state 时时监控、随时还原成为了可能。 为了使用更好的编程模式,你最好需要一起使用Redux的配套基础设施,它能让你的代码看起来更符合预期:
没错,它是基于React而诞生的一种新的设计模式。也是对Flux架构风格的一种实现。
我尝试用一个简单的idea来阐述这个事实:
有一个React Component叫着CommentList,一旦它Load完成,它就渲染出
所有 comment 的 user 和 content。
所以,你会以非常快的速度完成这道家庭作业,它看起来也许是这样子:
class CommentList extends React.Component {
this.state = { comments: [] };
componentDidMount() {
fetchSomeComments(comments =>
this.setState({ comments: comments }));
}
render() {
return (
{this.state.comments.map(c => (
- {c.body}—{c.author}
))}
);
}
}
目前为止,没有任何问题,实现的还不错。
实际上,你的 Component 负责了以下两件事情(将来或许更多):
来吧,换一种角度思考。既然我们推崇职责单一原则,那么显然,以上风格的确是存在设计上 的缺陷。我们就要尝试将正确的事物放到正确的位置,让它们以更好的方式进行链接、协同工作。
用 Container 来处理业务逻辑:
class CommentListContainer extends React.Component {
state = { comments: [] };
componentDidMount() {
fetchSomeComments(comments =>
this.setState({ comments: comments }));
}
render() {
return ;
}
}
用无逻辑视图来渲染UI:
class CommentList extends React.Component {
render() {
return (
{this.props.comments.map(c => (
- {c.body}—{c.author}
))}
)
}
}
It's better now! 它们看起来就优雅了许多!有很重要的一点必须体会到:component 的 props 是只读的,我们就用它来决定视图应该渲染成什么样子, 至于更为复杂的 state 就交给container处理吧。 但是这一切都不必你手动的分离出Container,react-redux中的 connect 方法 用来链接你的业务逻辑与视图,并自动创建并返回一个 Container 类型,在其他 Component 中就可以直接引用它。
它是一款关于电影推荐和搜索的APP,它会定位你所在的城市并推送正在上映和即将上映的新电影。 是基于以上我阐述的总总之后的产物,我用到了前面我所有提到的理论和事实。另外,推荐一个制作App icon的在线网站,十分好用: Make App Icon。同时,我也采用了热更新部署方案,请参考: microsoft code push
目前,这是它的样子:
是的,学习 React Native或是 React 的成本很低,希望能进一步学习它的源码和思想,这才是最重要的;为什么往往在类似 Facebook 一样的公司里容易诞生出 一种新的框架或是开发模式,我想大概那里更接近事实真相。
更多 React、React Native 资源,请参考 Js Coach.