如何根据Redux中的dispatch和payload在useEffect中更新的useState的值来判断



对不起,标题不清楚。

我使用React和Redux-toolkit。我立即在useState集合函数中引用了更新后的值,但我在更新前得到了值。我知道useState更新不会立即执行。

1。我们想做什么我想在事件中立即引用useState的更新值。

2.总结我想重新获取事件中的列表,并根据列表的数量做出判断(multipleList.length) .

3。代码

const [ multipleList, setMultipleList ] = useState<selectAddressList[]>([])
const selAddressList = useSelectAddressList();
// ★1
useEffect(() => {
const setNewSelAddrList = () => {
if (selAddressList && selAddressList.length > 0){
const newList = [...selAddressList]

// It has been confirmed that the updated address list is stored here.
  setMultipleList(newList);
 }
}
setNewSelAddrList();
}, [selAddressList])
// Combo Box Change Event
const onChangeAddr3 = async(rowData:string) => {
// rowData contains a zip code.
if (rowData != ''){
// Get a list of addresses from a zip code
await dispatch(fetchAsyncSelectedAddressList(rowData.toString()))        // ★2
     
// ★I want to be judged by the number of updated address listings.★
if (multipleList.length == 0){
XXXXXXX
}
}
};

4.补充★1当地址列表(selAddressList)发生变化时触发事件。使用fetchAsyncSelectedAddressList更新selAddressList。★2通过Redux的Slice,从API和地址列表(selAddressList)中检索数据更新.

我在onChangeAddr3等中创建了一个新数组,但无法获得更新的列表。

谢谢。

添加代码(单独文件中的代码)。from Store)

export function useSelectAddressList():selectAddressList[] {
return useSelector((state:RootState) => state.selectAddressList.list);
}
export const fetchAsyncSelectedAddressList = createAsyncThunk<selectAddressList[], string>(
"address/list",
async (zipNo : string) => {
const res = await axios.get<selectAddressList[]>(`${url}xxxx/xxx`,{
params: {
zipNo: zipNo,
} as searchParams
});
return res.data;
}
);

添加代码(代码显示屏幕)

<StyleFrom>
<NativeSelect
required
disabled = {disableAddress}
value = { add3Value }
onChange = {e => onChangeAddr3(e.target.value as string)}
>
<option key={0} value=''>{''}</option>
{
addr3List?
addr3List.map((row) => {
return (
<option key={row.zipNo}
value={String(row.zipNo)}>
{row.addrC}
</option>
)
})
: <option key={-1} value={0}>{'Failed'}</option>}
</NativeSelect>
</StyleFrom>

我们通常使用它来检索redux-saga中的存储状态const updatedList = useSelector(state =>state.savedMultipleList) from store.

我不知道这是否正确,但它已经解决了自己。
this取期望值

await dispatch(fetchAsyncSelectedAddressList(rowData.toString())).then((res) => {
// get count of list
const newList = res.payload as selectAddressList[]
if (newList.length == 0){
// case 0 count of list
alert(`no data`);
return;
}
else { alert(newList.length) }
})