数组未在useState中更新?

时间:2020-07-28 14:30:13

标签: reactjs

我知道这是一个重复的问题。其他问题不能解决我的问题。

代码如下:

const [roles, setRoles] = useState([]);
const { loading, error, data } = useQuery(GetRoles);
useEffect(() => {
    if (!loading) {
        const rolesArray = data.roles.map(role => { return { value: role.name, id: role.id } });
        setRoles([...rolesArray]);
    }
}, [loading, data]);

角色不会更新。我想念什么?

加载值是truefalse 数据值是: {roles:[{id: "1", name: "technical admin"}, {id: "2", name: "admin"}]}

2 个答案:

答案 0 :(得分:0)

您尝试过

setRoles(prevRoles => [prevRoles, ...rolesArray])

可能是问题所在,否则请粘贴以下值 加载,错误和数据

答案 1 :(得分:0)

// you can use this
setRoles(rolesArray)
// instead of this
setRoles([...rolesArray])
// as you completely overwrite the array

但这只是关于样式。至于您的问题,如果您100%确信useEffect内的所有内容都可以正常工作,那么只有一个答案-挂钩仅在更改“加载”或“数据”时才起作用。如果没有,那就没有变化。