首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的列表循环到React中的不同窗口

为什么我的列表循环到React中的不同窗口
EN

Stack Overflow用户
提问于 2019-11-29 15:18:17
回答 2查看 99关注 0票数 1

我正在创建一个数据管理存储web应用程序(基本上是一个待办事项应用程序),我遇到的问题是,当我输入数据时,它会在单独的Windows中打印

我想它在某个地方循环了,但我不确定。而且我似乎没有任何错误

这是我的CpdList.js

代码语言:javascript
复制
    import React, { Component } from 'react';
    import { Container, ListGroup, ListGroupItem, Button } from 'reactstrap';
    import { CSSTransition, TransitionGroup } from 'react-transition-group';
    import uuid from 'uuid';

    export default class CpdList extends Component{
        state = {
            items: [
                {id: uuid(), date: ''},
                {id: uuid(), activity: ''},
                {id: uuid(), hours: ''},
                {id: uuid(), learningStatement: ''},
                {id: uuid(), evidence: ''}
            ]
        }
        render() {
            const { items } = this.state;
            return (
                <Container>
                    <Button
                        color='dark'
                        style={{marginBottom: '2rem'}}
                        onClick={() => {
                            const date = prompt('Enter Date')
                            if(date) {
                                this.setState(state => ({
                                    items: [...state.items, { id: uuid(), date }]
                                }));
                            }
                            const activity = prompt('Enter Activity')
                            if(activity) {
                                this.setState(state => ({
                                    items: [...state.items, { id: uuid(), activity }]
                                }));
                            }
                            const hours = prompt('Enter Hours')
                            if(hours) {
                                this.setState(state => ({
                                    items: [...state.items, { id: uuid(), hours }]
                                }));
                            }
                            const learningStatement = prompt('Enter Learning Statement')
                            if(learningStatement) {
                                this.setState(state => ({
                                    items: [...state.items, { id: uuid(), learningStatement }]
                                }));
                            }
                            const evidence = prompt('Evidence YES or NO!')
                            if(evidence) {
                                this.setState(state => ({
                                    items: [...state.items, { id: uuid(), evidence }]
                                }));
                            }
                        }}
                    >Add Data</Button>
                    <ListGroup>
                        <TransitionGroup className='cpdList'>
                            {items.map(({ id, date, activity, hours, learningStatement, evidence }) => (
                                <CSSTransition key={id} timeout={500} classNames='fade'>
                                    <ListGroupItem>
                                        <Button
                                        className='remove-btn'
                                        color='danger'
                                        onClick={() => {
                                            this.setState(state => ({
                                                items: state.items.filter(item => item.id !== id)
                                            }));
                                        }}
                                        >&times;</Button>
                                        <ul className="list-group">
                                            <li className="list-group-item">Date: {date}</li>
                                            <li className="list-group-item">Activity: {activity}</li>
                                            <li className="list-group-item">Hours: {hours}</li>
                                            <li className="list-group-item">learning Statement: {learningStatement}</li>
                                            <li className="list-group-item">Evidence: {evidence}</li>
                                        </ul>
                                    </ListGroupItem>
                                </CSSTransition>
                            ))}
                        </TransitionGroup>
                    </ListGroup>
                </Container>
            )
        }
    };

当浏览器刷新且数据消失时,它还会重新打印5个Windows。

EN

回答 2

Stack Overflow用户

发布于 2019-11-29 16:23:50

我想问题出在你的this.state.items上。

所有的信息都应该放在一个项目中。

像这样

代码语言:javascript
复制
state = {
    items: [
        {
          id: uuid(),
          date: '',
          activity: '',
          hours: '',
          learningStatement: '',
          evidence: '',
        },
    ]
}

并且还需要更新第一个按钮的onClick函数。

您可以一次保存所有信息。

例如:

代码语言:javascript
复制
export default class CpdList extends Component{
    state = {
        items: []
    }
    handleClick = () => {
      const date = prompt('Enter Date')
      const activity = prompt('Enter Activity')
      const hours = prompt('Enter Hours')
      this.setState(state => ({
        items: [
          ...state.items,
          {
            id: uuid(),
            date,
            activity,
            hours,
          }
        ]
      }));
    }
    render() {
        const { items } = this.state;
        return (
            <Container>
                <Button
                    color='dark'
                    style={{marginBottom: '2rem'}}
                    onClick={this.handleClick}
                >Add Data</Button>
            </Container>
        );
票数 1
EN

Stack Overflow用户

发布于 2019-12-02 17:17:48

抱歉,我的前端代码有问题:

代码语言:javascript
复制
export default class CpdList extends Component{
    state = {}
    handleClick = () => {
      const date = prompt('Enter Date')
      const activity = prompt('Enter Activity')
      const hours = prompt('Enter Hours')
      const learningStatement = prompt('Enter Learningg Statement')
      const evidence = prompt('YES! or NO!')
      this.setState(state => ({
        items: [
          ...state.items,
          {
            id: uuid(),
            date,
            activity,
            hours,
            learningStatement,
            evidence
          }
        ]
      }));
    }



    render() {
        const { items } = this.state;

        return (
            <Container>
                <Button
                    color='dark'
                    style={{marginBottom: '2rem'}}
                    onClick={this.handleClick}
                >Add Data</Button>

                <Button
                    color='dark'
                    style={{marginBottom: '2rem'}}
                    onClick={() => { this.handleClick(items._id) }}
                >Delete Data</Button>

                {/* <button 
                    onClick={() => { this.handleClick(items._id) }}
                    color='dark'
                    style={{marginBottom: '2rem'}}
                    className="delete-btn"
                >Delete</button> */}

            </Container>
        );
    };
};

我的删除功能也有问题。我不能让它工作

代码语言:javascript
复制
CpdList.js:16 Uncaught TypeError: state.items is not iterable

这就是我在尝试加载数据时遇到的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59100336

复制
相关文章

相似问题

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