考虑在获取某些数据后需要更新状态的代码,我只需要更新初始状态(clientData)的数据部分:
#include <vector>
#include <iostream>
#include <unordered_map>
int main()
{
std::vector<int> nums = {2, 3, -2, 4};
std::unordered_map<int, std::vector<int>> m;
int prod_max = INT_MAX;
for(int i = 1; i < nums.size(); ++i)
{
prod_max = std::min(prod_max, nums[i-1]*nums[i]);
m.at(prod_max).push_back({i-1, i});
}
for(auto it : m)
{
std::cout << it.first << "\n";
}
}
我如何而且有可能只更新初始状态的“数据”部分而不必传播它( const [clientData, setClientData] = useState({
data: {},
product: 'profile'
});
useEffect(() => {
getProducts(1).then(res =>
setClientData({ ...clientData, data: res.data })
);
}, []);
)
答案 0 :(得分:2)
这是不可能的,因为看到了<action application="export" data="execute_on_answer=start_dtmf"/>
钩子replaces the prior state value返回的set方法的全部内容。
一种可能性是用多个钩子来分离您的状态,这将为您提供更细致的更新组件状态的方法:
useState
答案 1 :(得分:1)
这里有两个选择...
1)分开以下内容...
Hello
Hi!
Goobye!
Hello
Hi!
Goobye!hello world
进入...
const [clientData, setClientData] = useState({
data: {},
product: 'profile'
});
,然后您可以更新所需数据的一部分。如果您在上面列出的情况下,建议您这样做。或者...
2)使用“浸入式”之类的库,该库使您可以通过简单地修改现有状态树来创建新的状态树。
const [clientData, setClientData] = useState({});
const [clientProduct, setClientProduct] = useState('profile');
Immer是一个很棒的图书馆,您可以here
了解更多信息答案 2 :(得分:0)
这对于useState是不可能的。不过useReducer还是有可能的。