我想知道是否有可能为子封装器创建一个父封装器,它将自动将redux存储的一部分传递给它的子封装器。
例子<ReducProvider src="user">
<ul> {this.props.data.map(f=><li>{f.name}</li>)} </ul>
</ReducProvider>
这里我想让这个ul用props来渲染。data = ReduxProvider传递给它的数据
我知道我可以简单地得到我需要的部分使用连接像这样
connect( (state,prop)=>({data:state[prop.src]}) )(ReduxProvider)
,但有时我不希望父听存储的变化,我也不希望孩子知道这些数据是从哪里来的,所以我计划为每个减速器创建一个提供者我有。这样,当存储发生变化时,只有这些提供者会得到更新。
虽然这不是你问题的答案,但这可能会解决你的问题。
可以创建无意义的代理组件。这些组件呈现实际的组件,并将正确的变量作为道具传递。我记得曾经读到过,您可以自动生成这样的组件。
ES6中该组件的示例:
import React from 'react';
import { connect } from 'react-redux';
import User from './User';
class AuthenticatedUser extends React.Component {
render() {
return <User user={this.props.user} />
}
}
export default connect(
(state) => ({ user: state.Authentication.user }),
(dispatch) => {}
)(AuthenticatedUser);
!代码未测试
因此这段代码将把身份验证的用户从状态注入到User
组件中。保持User
组件干净,即您可以从任何来源呈现任何用户。虽然您还创建了一个选项来呈现用户的连接版本,该版本自动链接到商店。
实际问题的答案:
我不建议这样做,因为上下文是一个彻头彻尾的坏习惯。但是你可以把变量存储在上下文中。当请求使用contextTypes
属性时,子节点可以访问这些变量。