在 React 上下文状态中更新单个项目

Posted

技术标签:

【中文标题】在 React 上下文状态中更新单个项目【英文标题】:Updating a single item in React context state 【发布时间】:2021-01-08 17:45:44 【问题描述】:

所以我有以下格式的上下文:

class UserProvider extends Component 
    constructor(props) 
        super(props)

        this.initialize = (details) => 
            this.setState(state => 
                //Setting each item individually here
                //e.g state.a = details.a
            )
        

        this.editA = () => 
            this.setState(state => 
                //change A here
            )
        

        this.editB = () => 
            this.setState(state => 
                //Change B here
            )
        

        this.state = 
            a: null,
            b: null,
            editA: this.editA,
            editB: this.editB
        
    

    render() 
        return (
            <User.Provider value=this.state>
                this.props.children
            </User.Provider>
        )
    

所以对于每个状态,我都有一个单独的函数来更新它。如果我只想更新一个状态,我应该怎么做?

【问题讨论】:

只更新该字段,不为其他人做任何事情.. this.setState(a:'"value") @EugenSunic 当我想通过消费者访问每个字段时,这是否仍然需要单独的函数 你的意思是你只想要一个函数来更新一个字段,而不是n个字段的n个函数? 【参考方案1】:

考虑实现一个通用函数,以便您可以控制您的键和相应的值。

const changeField = (key, value) => this.setState( [key]: value);

函数调用

changeField('a','value_a')
changeField('b','value_b')

【讨论】:

以上是关于在 React 上下文状态中更新单个项目的主要内容,如果未能解决你的问题,请参考以下文章

React - 每当更新反应上下文中的状态时如何调用函数?

如何更新 componentDidMount 中的上下文状态?

React (Native) Context API 导致 Stack Navigator (React Navigation 5) 在状态更新后重新渲染

状态更改后,上下文未更新 React Native 中的文本

React 上下文需要 2 次状态更新才能让消费者重新渲染

在 axios 请求后自行更新状态?