如何使用useState更新初始状态对象的特定属性

时间:2019-08-27 02:51:59

标签: reactjs react-hooks use-effect

考虑在获取某些数据后需要更新状态的代码,我只需要更新初始状态(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 }) ); }, []);

3 个答案:

答案 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还是有可能的。