【问题标题】:state value is empty despite assigning value from res.data尽管从 res.data 分配值,但 state 值为空
【发布时间】:2019-05-14 17:09:59
【问题描述】:

我是 react 的初学者,我正在尝试使用 axios request 从我的数据库中获取数据。我已将 res.data 分配给我的状态,但是当我尝试打印时,它是空的。 我试图通过打印博客来发送警报消息,但它是空的。 当我在 alert 中传递 JSON.stringify(res.data) 时,它返回了我的数据库的正确集合。

const express = require('express');
const app = express();
const cors = require("cors");
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const blog = require('./model/blog');
const routes = express.Router();

app.use(cors());
app.use(bodyParser.json());

mongoose.connect("mongodb://127.0.0.1:27017/dummies");
const con = mongoose.connection;
con.on('open',(err,res)=>{
    console.log("Connected to the database");
});

routes.route('/').get((req,res)=>{
    blog.find((err,blog)=>{
        res.json(blog);
    })
});

routes.route('/add').post((req,res)=>{
    let b = new blog(req.body);
    b.save().then((err)=>{
        res.send("Saved");
    });
});

app.use('/',routes);

app.listen(3000,()=>{
    console.log("Connected on port 3000");
})

上面是 server.js 文件。

import React , {Component} from 'react';
import {Link} from 'react-router';
import Search from '../Search/Search';
import './Home.css';
import axios from 'axios';

const SingleBlog = (props)=>{
    return(
        <div>
            <p>{props.topic}</p>
        </div>
    )
}

class Home extends Component{
    constructor(props){
        super(props);
        this.state = {
            blogs:[]
        }
    }

    componentDidMount(){
        axios.get("http://localhost:3000/").then(res=>{
            this.setState=({
                blogs:res.data
            });
        })
       alert(this.state.blogs);

    }

    componentDidUpdate(){
        axios.get("http://localhost:3000/").then(res=>{
            this.setState=({
                blogs:res.data
            })
        })
    }

    render(){
        return(
            <div>
                <div className="banner">
                    <Search/>
                </div> 
                {this.state.blogs.map(blog=>{
                    return(
                        <div>
                            <p>{blog.topic}</p>
                        </div>
                    )
                })}
            </div>

        );
    }
}

export default Home;

这是我试图显示获取值的组件

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const Blog = new Schema({

    topic:{
        type:String
    },
    desc:{
        type:String
    }

});

module.exports = mongoose.model("Blog",Blog);

这是我的数据库模型。

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

乍一看,问题似乎是您在分配而不是调用setState

这段代码

this.setState=({
  blogs:res.data
})

应该是这样的(注意我去掉了=

this.setState({
  blogs:res.data
})

【讨论】:

  • 谢谢。它解决了这个问题,但 componentDidMount() 中的警报仍然返回空。你能解释一下吗
  • 这是因为,setState 是异步的,它不会立即反映状态。将警报代码更改为alert(res.data)
猜你喜欢
  • 1970-01-01
  • 2014-03-29
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
相关资源
最近更新 更多