React实战-深入源码了解Redux用法之Provider
来源:互联网 发布:淘宝卖大牌瑕疵化妆品 编辑:程序博客网 时间:2024/05/18 09:02
React实战-深入源码了解Redux用法之Provider
在Redux中最核心的自然是组件,以及组件相关的事件与数据流方式。但是我们在Redux中并没有采用传统的方式在getInitialState()中去初始化数据,而是采用Provider统一处理,省去了开发者不少工作,但是Redux到底如何将state中的数据传递给各组件的呢?还得看看Provider的源码实现(微信:react-javascript)。
1.常用数据传递写法
在ReactJS中的数据传递一般采用state和props,而props作为父组件向子组件的主要方式。如:
const TodoList = ({ todos, onTodoClick }) => (
<ul>
{todos.map(todo =>
<Todo
key={todo.id}
{...todo}
onClick={() => onTodoClick(todo.id)}
/>
)}
</ul>
)
以上代码可以看出key, todo数据对象,包括onClick函数都是采用props的方式传递给Todo子组件的。
但是作为统一的数据传递方式Provide,是怎样做的呢。
2.Provider的实现方式。
在我们在调用Provider时,采用的是以下的方式:
const store = createStore(reducer)
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
a.首先我们看到的是先创建store对象;
b.然后将store传递给Provider;
c.然后将应用组件做为Provider的子组件。
不过问题又来了:我们并没有看到Provider将store作为props传递给子组件啊。
3.Provider源码实现
打开Provider源码,我们看到Provider的源码实现并不多,除去一些安全性检查的代码外,仅仅剩下面的代码。
export default class Provider extends Component {
getChildContext() {
return { store: this.store }
}
constructor(props, context) {
super(props, context)
this.store = props.store
}
render() {
return Children.only(this.props.children)
}
}
上面的代码可以看出Provider是通过getChildContext的的方式传递给子组件的,并且我们也在connect中看到子组件取数据的过程:constructor(props, context) {
super(props, context)
this.version = version
this.store = props.store || context.store
.......
}
在没有定义props的情况下,通过context直接取得store中的数据,或者说取得context中的数据。而常见的场景一般如下:
<Provider store={store}>
<App />
</Provider>
看来Provider的实现原理,也就知道了它的封装过程和方法,也能更加灵活的运用了。
- React实战-深入源码了解Redux用法之Provider
- React深入源码--了解Redux用法之Provider
- React实战-深入源码了解Redux用法之Connect
- React实战-深入源码了解Redux用法之Reducers
- React实战-深入源码了解Redux用法之Middleware
- react -redux之provider作用小析
- react-redux中的<Provider>
- 脉冲云之react,redux,react-redux实战演练
- React实战-深入了解JSX
- redux 及 react-redux基本用法及源码解析
- React Redux 实战
- 深入理解React-Redux
- 深入理解React、Redux
- 深入理解React、Redux
- 深入理解react-redux
- React实战-通过ToDo源码分析Redux的数据模型设计
- react-redux-webpack进阶实战(含教程和源码)..
- react(4.0)之react-redux入门及基本用法
- linux 下 libcurl 库的使用
- 《MySQL技术内幕——InnoDB存储引擎》读书笔记(一)——MySQL体系结构和存储引擎
- Python批量替换文本内容
- Comparable接口对list的多条件排序
- 公钥私钥
- React实战-深入源码了解Redux用法之Provider
- java集合面试题
- oracle学习第一天:sql基础之用户
- 日本官网转的
- us_os_Ⅱ笔记
- Openssl 生成文件指令
- Mac端Android studio2.1安装和SDK的配置(2016.9.10)
- Python学习初衷、心得
- 输入一个整数,将各位数字翻转后输出