Компонент Console
отображается только в том случае, если меняется его реквизит или состояние.Реквизит может быть изменен только родителем компонента.Состояние - это внутренний объект компонента, который изменяется самим компонентом (но может зависеть от реквизита или других вычислений).
И реквизиты являются неизменными.Это означает, что вы не можете перезаписать их на
moduleArray.push(
<div
key={moduleArray.length}
id={moduleArray.length}
style={{ fontSize: 0, lineHeight: 0 }}
>
<Mod1 />
</div>
);
Вы даже объявили moduleArray
как const
.Измените moduleArray
в родительском элементе вашего компонента (с помощью функции обратного вызова) или инициализируйте состояние с помощью реквизитов компонента и измените состояние с помощью this.setState(/*...*/)
.
Возможное решение перечислено ниже:
class Main extends Component {
constructor(props) {
super(props);
this.state = {
moduleArray: [] // initialize empty or use props to init state
};
}
componentDidMount() {
// example
// this.setState({moduleArray: serverResponse.modules}
}
render() {
return (
<div id="builder-root">
<Console moduleArray={this.state.moduleArray} addModule={(module) => this.setState({
moduleArray: [
...this.state.moduleArray,
module
]
})}/>
</div>
);
}
}
}
export default Main;
class Console extends React.Component {
render() {
const {
moduleArray,
addModule
} = this.props;
const append = x => e => {
switch (x) {
case 0:
addModule(
<div
key={moduleArray.length}
id={moduleArray.length}
style={{fontSize: 0, lineHeight: 0}}
>
<Mod1/>
</div>
);
break;
//other switch cases
default:
}
};
return (
<div id="console">
<input onClick={append(0)} value="Single col" type="submit"/>
{/*other clicks passing parameters*/}
</div>
);
}
}
export default Console;