状态更改时从状态变量更新数据库

屋大维斯特凡·斯蒂芬·斯托卡

我要执行的操作是在按下保存按钮时使用状态变量更新数据库。在保存处理程序中,将一个新值添加到this.state.saved列表中,并调用updataDatabase函数。问题在于,当按下按钮时,setState不会更新状态变量,因此数据库中没有任何更新。我的问题是:如何使setState更新组件,以便更新数据库?这是我的代码

class Articles extends Component{
    constructor(props){
        super(props);
        this.state = {
            check:false,
            saved:[]
        }

        this.handleSave = this.handleSave.bind(this)
    }

    async componentDidMount(){
        savedArticles = this.props.article.saved

        this.setState({
            check:this.props.article.check,
            saved:this.props.article.saved
    })
}

async updateDataBase(){
    let updates = {
        body:{
            userName:this.props.article.user,
            userEmail:this.props.article.email,
            userPhone:this.props.article.phone,
            savedArticles:this.state.saved,
            userInterests:this.props.article.interestList,

        }


    }
    console.log(updates)

    return await API.put(apiName,path,updates);
}

handleSave () {
    const urlList = [];
    let article = {};

    for(let i=0; i<this.state.saved.length; i++){
        urlList.push(this.state.saved[i].url)
    }
    if(!urlList.includes(this.props.article.url)){

        article =  {
            url:this.props.article.url,
            title:this.props.article.title,
            image:this.props.article.urlToImage,
            author:this.props.article.author,
            check:true,

        }
        savedArticles.push(article)
            this.setState({
                check: true,
                saved:[...this.state.saved,article]

            })


        this.updateDataBase();

    }
}

render()
{
    console.log(this.state.check)

    return (
        <div className="item">
            <div className="card">
                <img src={this.props.article.urlToImage} alt="No available image" width="100%" height="200px"></img>
                <div>

                    <h5 className="card-title">{this.props.article.title}</h5>
                    <p className="card-text">{this.props.article.author}</p>
                    <a href={this.props.article.url} target="_blank" id="articleLink" className="btn btn-primary"><FontAwesomeIcon icon="external-link-alt" /> See full article</a>

                    {this.state.check?(
                        <button disabled={true}  id="buttonsArticle" className="btn btn-primary"><FontAwesomeIcon icon="check" /> Saved</button>
                    ):(
                        <button onClick={this.handleSave.bind(this)} id="buttonsArticle" className="btn btn-primary"><FontAwesomeIcon icon="save" /> Save Article</button>
                    )}

                </div>
            </div>
            <div className="divider"></div>
        </div>

    )
}}
汤姆·芬尼

那里的问题是您的代码正在同步运行。您先设置状态,然后调用,this.updateDataBase();但状态不会在该上下文中更新。此后实际发生状态更新和后续渲染。您可以想象它像调用队列一样工作setState,它注意到状态需要更新,但是队列中其他所有内容都必须首先执行。

看一下这个:https : //codesandbox.io/s/32n06zlqop?fontsize=14如果单击该按钮,它将立即注销为false的状态,然后再次注销componentDidUpdate该状态,您可以看到该状态已经设置好了。

因此,您有两种选择,可以在componentDidUpdate生命周期方法内调用更新数据库函数每次渲染后都会调用此函数,可以通过状态更改来触发该渲染。

或者,您可以传递第二个回调函数参数来设置状态,在实际设置状态后调用该参数。这可能是最优雅的版本:

this.setState({
      check: true,
      saved:[...this.state.saved, article]
    }, this.updateDataBase)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当值更改时,useEffect挂钩中定义的函数内的状态变量不会更新

来自分类Dev

当Aurelia共享状态变量更改时更新日历

来自分类Dev

用JSON数据反应更新状态变量

来自分类Dev

从 SharedPreferences 获取数据后状态变量未更新

来自分类Dev

迭代状态变量

来自分类Dev

C库如何存储状态变量?

来自分类Dev

使setState()更改整个类的状态变量

来自分类Dev

反应this.setState不更新数组状态变量

来自分类Dev

固体合同的状态变量无法通过JavaScript更新

来自分类Dev

从useCallback访问状态变量时,值不会更新

来自分类Dev

Lua中的玩家状态变量未按预期更新

来自分类Dev

使用状态变量更新计算属性

来自分类Dev

更新状态变量而不更改渲染时分配给它们的其他状态的值

来自分类Dev

错误:setState(...):使用状态变量的对象进行更新或返回状态变量的对象的函数

来自分类Dev

如何使状态变量线程安全

来自分类Dev

cakephp,链接以获取状态变量

来自分类Dev

什么是joomla中的状态变量

来自分类Dev

保持对React状态变量的“引用”

来自分类Dev

状态变量和ForEach Swift

来自分类Dev

观察绑定或状态变量

来自分类Dev

状态变量未呈现

来自分类Dev

如何使状态变量线程安全

来自分类Dev

没有状态变量的动作

来自分类Dev

数据库中的数据更改时更新变量

来自分类Dev

ReactJS-当状态变量为数字时,SetState不会更新状态

来自分类Dev

为什么状态变量不能由上下文变量更新?

来自分类Dev

我如何在Reactjs中更改状态变量的值

来自分类Dev

在AG网格回调中使用状态变量不更新

来自分类Dev

如何在React中更新数组中的状态变量?

Related 相关文章

热门标签

归档