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时,终端是否出现任何错误? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |