useState
不会立即更新状态。
我正在使用react-select,我需要根据请求结果加载组件并选择(multi
)选项。
基于这个原因,我创建了状态defaultOptions
来存储queues
常量的值。
事实证明,在加载组件时,只有第二次才显示值。
我在queues
中进行了console.log
,返回的结果与空不同。
我用相同的方式处理了defaultOptions
状态,但返回为空。
我创建了一个codesandbox以便更好地查看。
const options = [
{
label: "Queue 1",
value: 1
},
{
label: "Queue 2",
value: 2
},
{
label: "Queue 3",
value: 3
},
{
label: "Queue 4",
value: 4
},
{
label: "Queue 5",
value: 5
}
];
const CustomSelect = (props) => <Select className="custom-select" {...props} />;
const baseUrl =
"https://my-json-server.typicode.com/wagnerfillio/api-json/posts";
const App = () => {
const userId = 1;
const initialValues = {
name: ""
};
const [user, setUser] = useState(initialValues);
const [defaultOptions, setDefaultOptions] = useState([]);
const [selectedQueue, setSelectedQueue] = useState([]);
useEffect(() => {
(async () => {
if (!userId) return;
try {
const { data } = await axios.get(`${baseUrl}/${userId}`);
setUser((prevState) => {
return { ...prevState, ...data };
});
const queues = data.queues.map((q) => ({
value: q.id,
label: q.name
}));
// Here there is a different result than emptiness
console.log(queues);
setDefaultOptions(queues);
} catch (err) {
console.log(err);
}
})();
return () => {
setUser(initialValues);
};
}, []);
// Here is an empty result
console.log(defaultOptions);
const handleChange = async (e) => {
const value = e.map((x) => x.value);
console.log(value);
setSelectedQueue(value);
};
return (
<div className="App">
Multiselect:
<CustomSelect
options={options}
defaultValue={defaultOptions}
onChange={handleChange}
isMulti
/>
</div>
);
};
export default App;
const {data} = await api.get('/users/${userId}'
);,并在获取数据后将结果添加到状态
setUserQueues` 中。虽然我真的尝试了其他方法,但我无法以其他方式完成它。 - Wagner Fillioif (!userQueues) return <div>Loading</div>
或者什么都不做,这样就不会出现没有信息的渲染。你不需要将数据移动到第一个渲染位置,而是将第一个渲染位置移到数据处。 - Marianqueues
是在哪里定义的? - Mikequeues
is declared hereconst queues = data.queues.map((q) => ({...
- Wagner Fillio