#javascript #arrays #reactjs
#javascript #массивы #reactjs
Вопрос:
Я создаю простое приложение todo в react. У меня есть три компонента. Компонент, отвечающий за отображение элементов (компонент ‘Item’), отображает маркеры, но не текст. Вот мой код, (редактировать)
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = { list: [] };
this.addItem = this.addItem.bind(this);
}
addItem(val) {
let updated = [...this.state.list, val];
this.setState({ list: updated });
}
render() {
return (
<div className="App">
<Title itemCount={this.state.list.length}></Title>
<Add addItem={this.addItem}></Add>
<Items items={this.state.list}></Items>
</div>
);
}
}
//Items.js
const Items = ({ items }) => {
return (
<div className="Items">
<ul>{items.map((item, index) =>
<li key={index}>
{item.text}
</li>
)}
</ul>
</div>
);
};
редактировать 2:
Вот изображение:
Как я могу заставить его отображать текст? Заранее спасибо!
Комментарии:
1. Многострочный JSX необходимо заключить в фигурные скобки — либо отформатируйте
.map(..
оператор return в виде одной строки, либо оберните часть JSX в()
2. вы убедились, что у ваших элементов есть
text
поле? возможно, проблема вAdd
компоненте3. Я отредактировал Items.js часть кода.
4. распечатайте список после добавления элемента, чтобы мы могли видеть список, чтобы распечатать его, вы можете сделать это, заменив setState в addItem на this this.setState({ список: обновлено }, () => console.log(this.state.list));
Ответ №1:
Я вижу, что у списка нет свойства text, так что вот исправление:
const Items = ({ items }) => {
return (
<div className="Items">
<ul>{items.map((item, index) =>
<li key={index}>
{item}
</li>
)}
</ul>
</div>
);
};
Ответ №2:
В вашем коде:
{items.map((item, index) =>
<li key={index}>
{item.text}
</li>
)}
у destructed item
нет вызываемого свойства text
, item
в этом случае он содержит ваш текст. Итак, вам просто нужно удалить .text
изменить свой код на это.
<li key={index}>
{item}
</li>