【发布时间】:2020-05-09 11:29:59
【问题描述】:
这很简单,当您按“添加”时,它应该添加(并且它添加),当您按“删除”时,它应该弹出最后一个元素并重新渲染列表,但事实并非如此。我在某个地方犯了错误?
import React, { useState, useEffect } from 'react';
const Test = () => {
const [list, setList] = useState([]);
const add = () => {
setList([list.length, ...list]);
}
const remove = () => {
list.pop();
setList(list);
}
useEffect(() => {
console.log(list)
}, [list])
return (<ul>
<button onClick={add}>add</button>
<button onClick={remove}>remove</button>
{list.map(el => <li>{el}</li>)}
</ul>)
}
export default Test;
更新: 实际上它通过删除最后一个元素来更新状态,但只有在按下按钮“添加”时才会重新渲染
【问题讨论】:
-
您的添加功能似乎是错误的,您正在推送列表的长度,然后将整个列表添加到其中
-
不要改变你所在州的东西,使用例如
list.slice(0, -1)获取除最后一个值之外的所有值的数组。 -
@amardeepsaini 那是因为我想用前面的最新元素构建列表:最初列表是 [] (len = 0),当按下添加时列表设置为` [0, . ..[]] = [0](len = 1)` 然后在第二次添加点击列表变为
[1, ...[0]] = [1, 0](len 2)等等。 -
@HristoTodorov,你的 add 函数最糟糕的部分是你没有在其中做任何事情,你没有向它添加任何新列表,所以它不会工作。
-
@HristoTodorov 关于你的删除功能它不会起作用,因为你必须先改变状态然后执行操作然后设置它例如
标签: javascript reactjs react-hooks