我有5代组件结构:A-B-C-D-E
首先,我创建一个上下文:
const ThemeContext = React.createContext();
在A中是创建的提供者
<ThemeContext.Provider value={this.props.name} >
<Col><Menu navbarState={this.state.name} /></Col>
</ThemeContext.Provider>
在E中我需要用{this.props.name}
创建上下文
export class Panel extends RoleAwareComponentUser{
constructor(props) {
super(props);
// component will be visible for the roles below:
this.authorize = ['user'];
}
render(){
const jsx =(
<div>
<ThemeContext.Consumer>
{value => <Col><Link className={{value: value}} to= "/HomePage">Panel</Link></Col>}
</ThemeContext.Consumer>
</div>
);
return this.shouldBeVisible() ? jsx : null;
}
}
Link className的输出是“[Object,object]”
我怎样才能正确传递道具?
像"[Object, object]"
这样的字符串化对象意味着在预期字符串的地方提供了对象值。
它应该是:
<ThemeContext.Consumer>
{value => <Col><Link className={value} to= "/HomePage">Panel</Link></Col>}
</ThemeContext.Consumer>
className
接受字符串,但如果值为falsy,则不会添加class
属性。
正如在this answer中所解释的那样,它是Provider
和Consumer
组件的层次结构,允许传递上下文,因此<ThemeContext.Consumer>
应该将<ThemeContext.Provider>
作为父级。
如果有适当的层次结构,但上下文value
是假的,这意味着this.props.name
在作为提供者value
道具传递时是假的:
<ThemeContext.Provider value={this.props.name}>...