首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在React.JS中创建一个简单的列表生成应用程序?

如何在React.JS中创建一个简单的列表生成应用程序?
EN

Stack Overflow用户
提问于 2018-09-30 19:29:32
回答 3查看 633关注 0票数 3

我正在做一个简单的列表制造者,使用create来做列表应用程序,而且我很难弄清楚这个功能。我用这个应用程序想要做的是:

  • 我希望能够输入文本到一个输入,按下按钮或按回车,和任何文本将列出在应用程序的主体。
  • 我希望能够创建一个按钮,该按钮将在任务或目标完成后删除列表项。

到目前为止,我的代码被分解为以下组件:

App,ListInput,ItemList,项目

应用程序的代码是

代码语言:javascript
复制
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的代码是:

代码语言:javascript
复制
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;

项目代码是:

代码语言:javascript
复制
import React from 'react';

const Item = ({text}) =>{
    return (
        <div>
            <ul>{text}</ul>
        </div>
    )}
export default Item;

ItemList的代码是:

代码语言:javascript
复制
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”的错误没有定义,我很困惑为什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-30 19:36:00

在您的App.js中,您需要将项作为支柱传递给ItemList组件,如

代码语言:javascript
复制
 <ItemList items={this.state.items} />

此外,在addItem函数中,将inputValue推到items数组是不正确的,请执行以下操作

代码语言:javascript
复制
  addItem = () => {
     this.setState(state => {
        let inputValue = this.input.current.value;
        if (inputValue !== '') {
            this.setState(prevState => ({
                items: [...prevState.items, inputValue]
            }));
         }
      })
  }

而在ItemList.js中,在执行.map之前做条件检查也是.map中的一些错误

代码语言:javascript
复制
 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;

试着做上面的修改,这会有效的

如果有错误,请原谅,因为我正在用手机接听。

票数 1
EN

Stack Overflow用户

发布于 2018-09-30 19:34:03

你的ItemList不正确。查看下面更正的代码段,您需要映射项而不是项(因此错误项没有定义)。此外,您还需要在您的ItemList中将项作为app.js的支柱。

代码语言:javascript
复制
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中做了什么删除它。

代码语言:javascript
复制
<ItemList items={this.state.items}/>
票数 1
EN

Stack Overflow用户

发布于 2018-09-30 19:36:19

似乎您在ItemList中有一个错误。

它接收items (复数)作为支柱,但您正在使用item

代码语言:javascript
复制
const ItemList = ({ items }) => {
    return (
        <div>
            {items.map(items => <Item key={item.id}
            text={item.text} />
            )}
        </div>
    )
}

不要忘记将items道具实际传递给“ItemList”:

代码语言:javascript
复制
<ItemList items={this.state.items} />
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52581402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档