我正在使用一个简单的列表制作器,使用create-react-app来做列表应用程序,但在使功能困惑时遇到了一些麻烦。我要用此应用程序完成的工作:
我希望能够在输入中输入文本,按按钮或按Enter,然后任何文本都会列在应用程序主体上。
我希望能够创建一个按钮,该按钮将在任务或目标完成后删除列表项
到目前为止,我的代码分为以下几个部分:
应用, ListInput, ItemList, 项目
App的代码为
import React, { Component } from 'react';
import './App.css';
import Navigation from './components/Navigation';
import ListInput from './components/ListInput';
import ListName from './components/ListName';
import Item from './components/Item';
import ItemList from './components/ItemList';
class App extends Component {
constructor() {
super();
this.state = {
input: '',
items: []
};
}
addItem = () => {
this.setState(state => {
let inputValue = this.input.current.value;
if (inputValue !== '') {
this.setState({
items: [this.state.items, inputValue]
})
}
})
}
onButtonEnter = () => {
this.addItem();
}
render() {
return (
<div className="App">
<Navigation />
<ListName />
<ListInput addItem={this.addItem}
onButtonEnter={this.onButtonEnter} />
<Item />
<ItemList />
</div>
);
}
}
export default App;
ListInput的代码是:
import React from 'react';
import './ListInput.css';
const ListInput = ({ addItem, onButtonEnter }) => {
return (
<div>
<p className='center f2'>
{'Enter List Item'}
</p>
<div className='center'>
<div className='center f3 br-6 shadow-5 pa3 '>
<input type='text'
className='f4 pa2 w-70 center'
placeholder='Enter Here'
/>
<button className='w-30 grow f4 link ph3 pv2 dib white bg-black'
onClick={onButtonEnter}
onSubmit={addItem} >
{'Enter'}
</button>
</div>
</div>
</div>
);
}
export default ListInput;
Item的代码为:
import React from 'react';
const Item = ({text}) =>{
return (
<div>
<ul>{text}</ul>
</div>
)}
export default Item;
ItemList的代码是:
import React from 'react';
import Item from './Item';
const ItemList = ({ items }) => {
return (
<div>
{item.map(items => <Item key={item.id}
text={item.text} />
)}
</div>
)
}
export default ItemList;
在我的React应用中,我没有返回错误“ item”,我很困惑为什么。
答案 0 :(得分:1)
您的ItemList不正确。请看下面的更正代码段,您需要映射项目而不是项目(因此未定义错误项目)。此外,您还需要将项目作为app.js中ItemList的道具
import React from 'react';
import Item from './Item';
const ItemList = ({ items }) => {
return (
<div>
{items.map(item => <Item key={item.id}
text={item.text} />
)}
</div>
)
}
export default ItemList;
在app.js中添加以下行。另外,我看不到您的app.js正在做什么,请删除它。
<ItemList items={this.state.items}/>
答案 1 :(得分:1)
在App.js中,您需要将商品作为道具传递给ItemList组件,例如
<ItemList items={this.state.items} />
同样在addItem函数中,将inputValue推送到items数组也是不正确的,如下所示
addItem = () => {
this.setState(state => {
let inputValue = this.input.current.value;
if (inputValue !== '') {
this.setState(prevState => ({
items: [...prevState.items, inputValue]
}));
}
})
}
在ItemList.js中,在执行.map之前还要进行条件检查。.map中还会出现一些拼写错误
import React from 'react';
import Item from './Item';
const ItemList = ({ items }) => {
return (
<div>
{items && items.map(item => <Item key={item.id}
text={item.text} />
)}
</div>
)
}
export default ItemList;
尝试上述更改即可
如果有错字,请原谅,因为我正在用手机接听电话
答案 2 :(得分:1)
好像您在ItemList
中有错字。
它会收到items
(复数)作为道具,但是您正在使用item
。
const ItemList = ({ items }) => {
return (
<div>
{items.map(items => <Item key={item.id}
text={item.text} />
)}
</div>
)
}
不要忘记将items
道具传递给'ItemList':
<ItemList items={this.state.items} />