Имейте множество вариантов цвета, хотите создать динамический список этих элементов, а затем изменить состояние на выбранный цвет при щелчке.
Вот мой текущий код:
import React from 'react';
import ReactDOM from 'react-dom';
const colors=["white","green","blue", "red", "orange"];
class Grid extends React.Component{
constructor(props){
super(props);
this.state = {
color: colors[0]
};
}
setCurrentColor(setColor){
this.setState({
color: setColor
});
}
setColorSelections(){
const colorItems = colors.map((thecolor) =>
<li
onClick = {(thecolor) => this.setCurrentColor(thecolor) }
key = {thecolor} >
{thecolor}
</li>
);
return(
<ul>
{colorItems}
</ul>
)
}
render(){
return(
<div>
<p>Current selection: {this.state.color}</p>
{this.setColorSelections()}
</div>
)
}
}
Получение следующей ошибки
Uncaught Invariant Violation: Objects are not valid as a React child
Я действительно не могу вывести состояние? Как это исправить
Удалите параметр thecolor
из функции onClick
или переименуйте его во что-то другое, это выдает ошибку, потому что переменная была объявлена в функции карты map((thecolor)
setColorSelections() {
const colorItems = colors.map((thecolor) =>
<li
onClick = {(event) => this.setCurrentColor(thecolor)}
key = {thecolor} >
{thecolor}
</li>
);
return (
<ul>
{colorItems}
</ul>
)
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.6.0/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.0/umd/react-dom.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.21.1/babel.min.js"></script>
<div id = "root"></div>
<script type = "text/babel">
const colors = ["white", "green", "blue", "red", "orange"];
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
color: colors[0]
};
}
setCurrentColor(setColor) {
this.setState({
color: setColor
});
}
setColorSelections() {
const colorItems = colors.map((thecolor) =>
<li
onClick = {(event) => this.setCurrentColor(thecolor)}
key = {thecolor} >
{thecolor}
</li>
);
return (
<ul>
{colorItems}
</ul>
)
}
render() {
return (
<div>
<p style = {{ backgroundColor: this.state.color }}>Current selection: {this.state.color}</p>
{this.setColorSelections()}
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
</script>