gpt4 book ai didi

javascript - useState Hook 未使用正确的值 : Array 进行初始化

转载 作者:行者123 更新时间:2023-12-03 14:10:46 26 4
gpt4 key购买 nike

我将一个数组“默认值”传递到我的面板组件中,然后尝试将状态 Hook “选定选项”设置为等于它。由于某种原因,该钩子(Hook)设置了一个空数组。

组件:

const Panel = ({ title, inputs, datepicker, identifiers, apiBase, isins, defaults = [], notes = "" }) => {
const [expand, setExpand] = useState(false);
const [date, setDate] = useState(new Date());
const [selectedOption, setSelectedOption] = useState([...defaults]);
const [dataError, setDataError] = useState(false);
const [errorMsg, setErrorMsg] = useState('');
const [errorCheckLoading, setErrorCheckLoading] = useState(false);

const toggleExpand = () => {
setExpand(!expand);
console.log(defaults);
console.log(selectedOption);
};

只是为了测试,我的切换扩展功能中有几个控制台日志,以便我可以根据数据集测试传入的数据。

控制台日志的输出:

>(48) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, 
{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…},
{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
>[]

所以我知道数据正常,只是它没有设置在钩子(Hook)中。

我还尝试为钩子(Hook)指定默认值和[默认值]。

现在画一个空白 - 有什么想法吗?

编辑:这是提供默认值的父组件:

const Parent = () => {

const [all, setAll] = useState([]);
const [allLoadFailed, setAllLoadFailed] = useState(false);

const [defaults, setDefaults] = useState([]);
const [defaultsLoadFailed, setDefaultsLoadFailed] = useState(false);

useEffect(() => { loadData()}, []);
useEffect(() => { loadDefaultData()}, []);

const loadDefaultData = async () => {
try {
let defaultData = await GetDefaults();
setDefaults(defaultData.map(item => item = {value: item, label: item}));
} catch (_) {
setDefaultsLoadFailed(true);
}
};

const loadData = async () => {
try {
let iData = await GetAll();
let filteredIData = iData.filter(item => item);
setAll(filteredIData.map(item => item = {value: item, label: item}));
} catch (_) {
setAllLoadFailed(true);
}
};


return (

<Panel
title="Test"
isins={all}
defaults={defaults}
inputs
datepicker
identifiers
apiBase=""
notes="not yet complete"
key="2"
/>
);

最佳答案

我猜测 defaults 是来自 api 调用的值?

发生这种情况是因为在初始渲染时defaults = []useState的第一个参数只获取初始值,所以当default在第二次渲染中更改为正确的数据,useState 已经具有 [] 值。

您应该做的是在 defaults 更改并设置 selectedOption 时使用 useEffect 钩子(Hook)。

useEffect(() => {
setSelectedOption([...defaults])
}, [defaults, setSelectedOption])

关于javascript - useState Hook 未使用正确的值 : Array 进行初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60262530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com