【发布时间】:2018-06-28 15:48:06
【问题描述】:
我正在尝试根据在 onClick 处理程序 this.showComponentToRender('features') 上传递的参数返回组件。如果单击功能,它将运行showComponentToRender(name) 并设置状态,并在render() 中,{this.state.showComponent} 显示正确的组件。
但是,当我尝试在
中传递一个 propresetFeatures={this.props.resetFeatures}
showFeatures() {
return (<FeaturesList
updateCad={this.props.updateCad}
resetFeatures={this.props.resetFeatures}
/>);
}
单击 RESET A4 链接,调用resetCrossbow() 激活父组件中的功能。父组件更新其状态,并将状态作为道具传递给其子组件。
由于某种原因,如果我在设置为状态的函数中返回它,我无法让 resetFeatures 道具进入<FeaturesList /> 组件。为什么是这样?我正在寻找修复建议。
如果我按照传统方法将<FeaturesList /> 放在render() 的返回中,一切都很好。
这是组件
import React, { Component } from 'react';
import FeaturesList from './FeaturesList';
import ColorsList from './ColorsList';
import './../assets/css/features-menu.css';
export default class FeaturesMenu extends Component {
constructor(props) {
super(props);
this.state = {
showComponent: this.showFeatures()
};
this.showFeatures = this.showFeatures.bind(this);
this.showColors = this.showColors.bind(this);
}
showFeatures() {
return (<FeaturesList
updateCad={this.props.updateCad}
resetFeatures={this.props.resetFeatures}
/>);
}
showColors() {
this.props.resetCrossbow();
return <ColorsList switchColor={this.props.switchColor} />
}
showComponentToRender(name) {
if (name === 'features') {
this.setState({
showComponent: this.showFeatures()
});
} else {
this.setState({
showComponent: this.showColors()
})
}
}
render() {
// console.log(`this.props.resetFeatures: ${this.props.resetFeatures}`);
return (
<div id="features-menu-wrapper">
<nav id="features-menu">
<li onClick={() => this.showComponentToRender('features')}>FEATURES</li>
<li onClick={() => this.showComponentToRender('colors')}>COLORS</li>
<li onClick={() => this.props.resetCrossbow()}>RESET A4</li>
</nav>
<div id="component-wrapper">
{this.state.showComponent} // <- I am not able to pass resetFeatures prop if I do it this way. Why?
{/* <FeaturesList
updateCad={this.props.updateCad}
resetFeatures={this.props.resetFeatures} <- I am able to pass resetFeatures prop as normal.
/>
<ColorsList switchColor={this.props.switchColor} /> */}
</div>
</div>
);
}
}
【问题讨论】:
-
{this.state.showComponent}已被渲染。所以你不能在那里改变他们的道具。您可以创建某种 HOC 并使用它将其他道具传递给showComponent
标签: javascript reactjs