Redux:将组件动态传递给 Provider
Redux: Dynamically pass component to Provider
我正在尝试创建一个动态接受提供程序组件的函数。我当然可以只将商店添加到组件中,但为了简单起见,我想尝试通过函数参数传递它。
例如,我希望能够通过传入 MyComponent
:
来动态创建它
ReactDOM.render(
<Provider store={reduxStore}>
<MyComponent />
</Provider>,
$('.my-component)[0]
)
然而,这从 React 0.14 开始不再有效。
let provideComponent = function(selector, store, componentCallback) {
ReactDOM.render(
<Provider store={store}>
componentCallback()
</Provider>,
$(selector)[0]
)
}
provideComponent('.my-component', reduxStore, function() {
return <MyComponent />
}
# raises error
# Warning: Failed propType: Invalid prop `children` supplied to `Provider`, expected a single ReactElement.
我也试过在组件传入store之后再添加,但是这是被禁止的。如何将智能组件动态传递给 Redux 提供程序?
试试这个:
let provideComponent = function(selector, store, componentCallback) {
var Component = componentCallback();
ReactDOM.render(
<Provider store={store}>
<Component />
</Provider>,
$(selector)[0]
)
}
provideComponent('.my-component', reduxStore, function() {
return MyComponent;
}
记住,JSX 区分大小写。大写和小写元素都被转换为 React.createElement
调用。但是大写元素被视为组件,因此传递 "naked",而小写元素被视为 DOM 元素并作为字符串传递:
<div>
<Component />
</div>
翻译成:
React.createElement('div', {},
React.createElement(Component, {})
)
注意 <div>
变为 'div'
(引号),而 <Component />
变为 Component
(无引号)。
* 编辑 *
如果你想让你的回调指定道具,而不是在 ReactDOM.render()
调用期间传递它们,你可以这样做:
let provideComponent = function(selector, store, componentCallback) {
ReactDOM.render(
<Provider store={store}>
{componentCallback()}
</Provider>,
$(selector)[0]
)
}
// Return the actual element, instead of just the type
provideComponent('.my-component', reduxStore, function() {
return <MyComponent prop1="value" prop2="value" />;
}
我正在尝试创建一个动态接受提供程序组件的函数。我当然可以只将商店添加到组件中,但为了简单起见,我想尝试通过函数参数传递它。
例如,我希望能够通过传入 MyComponent
:
ReactDOM.render(
<Provider store={reduxStore}>
<MyComponent />
</Provider>,
$('.my-component)[0]
)
然而,这从 React 0.14 开始不再有效。
let provideComponent = function(selector, store, componentCallback) {
ReactDOM.render(
<Provider store={store}>
componentCallback()
</Provider>,
$(selector)[0]
)
}
provideComponent('.my-component', reduxStore, function() {
return <MyComponent />
}
# raises error
# Warning: Failed propType: Invalid prop `children` supplied to `Provider`, expected a single ReactElement.
我也试过在组件传入store之后再添加,但是这是被禁止的。如何将智能组件动态传递给 Redux 提供程序?
试试这个:
let provideComponent = function(selector, store, componentCallback) {
var Component = componentCallback();
ReactDOM.render(
<Provider store={store}>
<Component />
</Provider>,
$(selector)[0]
)
}
provideComponent('.my-component', reduxStore, function() {
return MyComponent;
}
记住,JSX 区分大小写。大写和小写元素都被转换为 React.createElement
调用。但是大写元素被视为组件,因此传递 "naked",而小写元素被视为 DOM 元素并作为字符串传递:
<div>
<Component />
</div>
翻译成:
React.createElement('div', {},
React.createElement(Component, {})
)
注意 <div>
变为 'div'
(引号),而 <Component />
变为 Component
(无引号)。
* 编辑 *
如果你想让你的回调指定道具,而不是在 ReactDOM.render()
调用期间传递它们,你可以这样做:
let provideComponent = function(selector, store, componentCallback) {
ReactDOM.render(
<Provider store={store}>
{componentCallback()}
</Provider>,
$(selector)[0]
)
}
// Return the actual element, instead of just the type
provideComponent('.my-component', reduxStore, function() {
return <MyComponent prop1="value" prop2="value" />;
}