英文:
render task list in react, problem with array
问题
以下是要翻译的代码部分:
function TaskList() {
const { tasks } = useContext(TaskContext);
return tasks.length === 0 ? (
<h2>No hay tareas agregadas</h2>
) : (
<section className="task-list">
<div className="pending-task">
<h3>Tareas pendientes:</h3>
<ul className="list">
{tasks.filter((t) => t.done === false).length === 0 ? (
<h4>No hay tareas por realizar</h4> // 如果没有要做的任务,应该呈现这个
) : (
tasks
.filter((t) => t.done === false)
.map((t, i) => <TaskCard key={t.id} task={t} index={i} />) // 这里呈现了待办任务
)}
</ul>
</div>
<div className="done-task">
<h3>Tareas realizadas:</h3>
<ul className="list">
{tasks.filter((t) => t.done === true).length === 0 ? (
<h4>No ha realizado ninguna tarea</h4> // 如果没有已完成的任务,我仍然想要显示这个
) : (
tasks
.filter((t) => t.done === true)
.map((t, i) => <TaskCard key={t.id} task={t} index={i} />) // 这里呈现了已完成的任务
)}
</ul>
</div>
</section>
);
}
请注意,这是代码的中文翻译部分。如果您有任何其他问题或需要进一步的帮助,请随时提出。
英文:
I have a problem wanting to conditionally render a task group depending on whether they are marked as performed or pending.
function TaskList() {
const { tasks } = useContext(TaskContext);
return tasks.length === 0 ? (
<h2>No hay tareas agregadas</h2>
) : (
<section className="task-list">
<div className="pending-task">
<h3>Tareas pendientes:</h3>
<ul className="list">
{tasks.filter((t) => t.done === false).length === 0 ? (
<h4>No hay tareas por realizar</h4> // In case there is no task to do, you should render this
) : (
tasks
.filter((t) => t.done === false)
.map((t, i) => <TaskCard key={t.id} task={t} index={i} />) //here are rendered those that are pending
)}
</ul>
</div>
<div className="done-task">
<h3>Tareas realizadas:</h3>
<ul className="list">
{tasks.filter((t) => t.done === true).length === 0 ? (
<h4>No ha realizado ninguna tarea</h4> //In case no task has been performed I still want to show this
) : (
tasks
.filter((t) => t.done === true)
.map((t, i) => <TaskCard key={t.id} task={t} index={i} />) //here are rendered the ones I already made
)}
</ul>
</div>
</section>
);
}
But when I put it to the test and click the button to mark the task as done, I throw the following error:
Uncaught TypeError: Cannot read properties of undefined (reading 'done') at TaskList.jsx:16:34
What would be this line here:
tasks.filter((t) => t.done === false).length === 0
I am aware that this error can occur because when filtering an array without elements, you cannot find the specified done property.
the funny thing is that after the app has been bugled due to the aforementioned error, if I refresh the page, the app works again and the task in which I clicked appears marked, that is, the bug is deleted, so I don’t know what I’m doing wrong, I have a couple of months practicing with react and there are things I’m learning.
答案1
得分: 1
这是我的上下文的一部分:
const [tasks, setTask] = useState([]);
const [checked, setChecked] = useState(false);
useEffect(() => setTask(data), []);
// 这里的 *data* 值来自一个导入,它是一个数组,读取浏览器本地存储中存储的任务
英文:
This is part of my context:
const [tasks, setTask] = useState([]);
const [checked, setChecked] = useState(false);
useEffect(() => setTask(data), []);
// Here the value of *data* comes from an import that is an array that reads the tasks stored in the browser localstorage
答案2
得分: 0
如果您确定TaskContext中的tasks数组已正确初始化并包含具有done属性的有效任务对象,并且在呈现TaskList组件时tasks数组不为null或未定义,您可以在呈现组件之前添加一个空检查以处理这种情况。
if (!tasks) {
return null // 或者呈现加载状态
}
英文:
If you are sure that that the tasks array in the TaskContext is properly initialized and contains valid task objects with the done property and tasks array is not null or undefined when the TaskList component is rendered. You can add a null check before rendering the component to handle such cases.
if (!tasks) {
return null // or render a loading state
}
答案3
得分: 0
你可以将这一行修改为
tasks.some((t) => !t?.done)
英文:
You can modify this line
tasks.filter((t) => t.done === false).length === 0
with
tasks.some((t) => !t?.done)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论