【发布时间】:2023-03-27 21:28:01
【问题描述】:
TypeError:lists.map 不是函数
1.我正在使用 React 制作 TodoList。在您添加列表之前,它一直有效, 按钮时添加删除功能时出错 点击了
2.使用useContext将列表与其他文件分开会不会有问题?
对于这个问题的尴尬,我深表歉意。 感谢您帮助解决此问题。
- TodoList.jsx
import React, { useContext} from 'react';
import Todo from './Todo';
import { ListContext } from './ListContext';
const TodoList = () => {
const [lists, setLists] = useContext(ListContext);
return (
<div>
{lists.map((list, index) => {
return <Todo list={list.todos} key={index}/>
})}
</div>
);
}
export default TodoList;
- Btn.jsx
import React, {useContext} from 'react';
import { ListContext } from './ListContext';
const Btn = (id) => {
const [lists, setLists] = useContext(ListContext);
const onRemove = (id) => {
setLists({
lists: lists.filter(list => list.id !== id)
});
}
return(
<>
<button onClick={(e) => {
e.stopPropagation();
onRemove(id);
}}>x</button>
</>
); `enter code here`
}
export default Btn;
- ListContext.jsx
import React, {useState, createContext,} from 'react';
export const ListContext = createContext();
export const ListProvider = (props) => {
const [lists, setLists] = useState([
{
todos: 'Make a TodoList',
id: 1,
},
]);
return(
<ListContext.Provider value={[lists, setLists]}>
{props.children}
</ListContext.Provider>
);
}
TypeError:lists.map 不是函数 待办事项列表 C:/Users/user/Desktop/Work/VSC-workspace/React/todolist/src/component/TodoList.jsx:11 8 | const [lists, setLists] = useContext(ListContext); 9 | 10 |返回(
11 | `在此输入代码 | ^ 12 | {lists.map((list, index) => { 13 |返回 14 | })}
【问题讨论】:
-
在
onRemove中应该是setLists(lists.filter(list => list.id !== id)) -
所以我对 React 有点陌生,但是当您使用 useState 创建列表时,您会说列表应该是带有
todos和id的对象数组。因此,当您使用setLists并使用{ lists: lists.filter }....传入对象时,我相信您为键提供列表的对象应该是期望todos和id的对象,因此您无法设置该属性像这样的列表。您可能可以setLists(lists.filter(list => list.id !== id)),但也不确定lists的数据来源 -
为您的问题创建一个codesandbox.io/s/l4w3o6my59 示例。
-
你是如何添加
Btn组件的,也贴一下。
标签: javascript reactjs jsx