加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 反应唯一的“密钥”错误

发布时间:2020-12-15 20:16:38 所属栏目:百科 来源:网络整理
导读:我正在浏览React中的todo列表教程并遇到以下错误,我花了很长时间才找不到错误.这里有错误和组件的代码,这就是代码对于课程回购(此提交中出现问题): https://github.com/andrewjmead/react-course-todo-app/commit/0521f151705f78cb9f8d69262eb093f1431cb9ca
我正在浏览React中的todo列表教程并遇到以下错误,我花了很长时间才找不到错误.这里有错误和组件的代码,这就是代码对于课程回购(此提交中出现问题):

https://github.com/andrewjmead/react-course-todo-app/commit/0521f151705f78cb9f8d69262eb093f1431cb9ca

任何帮助非常感谢.

警告:数组或迭代器中的每个子节点都应该具有唯一的“键”支柱.检查TodoList的render方法.有关更多信息,请参见fb.me/react-warning-keys.

终端中也存在错误,对于TOGGLE_TODO的扩展运算符

return {
...todo,// here
completed: nextCompleted,completedAt: nextCompleted ? moment().unix() : undefined
};

var React = require('react');
var { connect } = require('react-redux');
import Todo from 'Todo';
var TodoAPI = require('TodoAPI');

export var TodoList = React.createClass ({
    render: function() {
        var { todos,showCompleted,searchText } = this.props;
        var renderTodos = () => {
            if(todos.length === 0) {
                return (
                    <p className="container__message">No tasks</p>
                );
            }
            return TodoAPI.filterTodos(todos,searchText).map((todo) => {
                return (
                    //add unique key prop to keep track of individual components
                    <Todo key={todo.id} {...todo} />
                );
            });
        };
        return (
            <div>
                {renderTodos()}
            </div>
        );  
    }
});

export default connect(
    (state) => {
        return state;
    }
)(TodoList);

减速器:

var uuid = require('uuid');
var moment = require('moment');

export var searchTextReducer = (state = '',action) => {
    switch (action.type) {
        case 'SET_SEARCH_TEXT':
            return action.searchText;
        default: 
            return state;
    };
};

export var showCompletedReducer = (state = false,action) => {
    switch (action.type) {
        case 'TOGGLE_SHOW_COMPLETED':
            return !state;
        default: 
            return state;
    };    
};

export var todosReducer = (state = [],action) => {
    switch(action.type) {
        case 'ADD_TODO':
            return [
                ...state,{
                    text: action.text,id: uuid(),completed: false,createdAt: moment().unix(),completedAt: undefined                   
                }
            ];
        case 'TOGGLE_TODO':
            return state.map((todo) => {
                if(todo.id === action.id) {
                    var nextCompleted = !todo.completed;

                    return {
                        ...todo,completed: nextCompleted,completedAt: nextCompleted ? moment().unix() : undefined
                    };
                } else {
                    return todo;
                }
            });
        case 'ADD_TODOS':
            return [
                ...state,...action.todos
            ];
        default: 
            return state;
    }
};


Webpack:

var webpack = require('webpack');

module.exports = {
  entry: [
    'script!jquery/dist/jquery.min.js','script!foundation-sites/dist/js/foundation.min.js','./app/app.jsx'
  ],externals: {
      jquery: 'jQuery'
  },plugins: [
      new webpack.ProvidePlugin({
          '$': 'jquery','jQuery': 'jquery'
      })
  ],output: {
    path: __dirname,filename: './public/bundle.js'
  },resolve: {
    root: __dirname,modulesDirectories: [
        'node_modules','./app/components','./app/api'
    ],alias: {
        applicationStyles: 'app/styles/app.scss',actions: 'app/actions/actions.jsx',reducers: 'app/reducers/reducers.jsx',configureStore: 'app/store/configureStore.jsx'
    },extensions: ['','.js','.jsx']
  },module: {
    loaders: [
      {
        loader: 'babel-loader',query: {
          presets: ['react','es2015']
        },test: /.jsx?$/,exclude: /(node_modules|bower_components)/
      }
    ]
  },devtool: 'cheap-module-eval-source-map'
};

解决方法

不推荐使用node-uuid,请在此处查看: https://www.npmjs.com/package/uuid

你可以通过安装uuid来更新你的package.json,看看它是否有帮助:

npm安装uuid

只是不要忘记更新var uuid = require(‘node-uuid’); to var uuid = require(‘uuid’);在你的其他文件中.

附:运行webpack时,终端是否出现任何错误?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读