Почему я не могу получить доступ к данным свойств json по имени свойства вactjs? - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь получить данные из базы данных, используя mongodb и mongoose.

У меня есть функция запроса:

componentDidMount(){

        fetch('http://localhost:5000/tweet')
        .then(function(response) {
            return response.json();
        })
        .then(result=>{
            this.setState({
                tweetData:JSON.stringify(result)
            });
            console.log(this.state.tweetData);
        });

    }

Я пытаюсь показать по console.log, все нормально:

enter image description here но когда я получаю доступ к свойствам по имени свойства, console.log показывает: null

почему?

вот мой бэкэндкод:

app.get('/tweet',(req,res)=>{
    tweetData.find((err,data)=>{
        if(err){
            return res.json({success: false, error: err});
        }
        return res.json({success: true, data:data});
    });
})

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вы анализируете JSON, а затем снова его форматируете.Удалите JSON.stringify, и оно должно работать как положено.

setState также является асинхронным, поэтому вы не можете получить доступ к новому состоянию в приведенном ниже операторе.Вы можете использовать второй аргумент setState, который является обратным вызовом, который будет вызываться при установке состояния.

componentDidMount() {
    fetch('http://localhost:5000/tweet')
        .then(response => response.json())
        .then(result => {
            this.setState({
                tweetData: result
            }, () => console.log(this.state.tweetData));
        })
}
0 голосов
/ 23 февраля 2019

Вы должны result.data.

.then(result=>{
        this.setState({
            tweetData:result.data
        },()=>{
            console.log(this.state.tweetData);
        );

    });

И setState является асинхронным, вы можете использовать функцию обратного вызова для проверки обновления состояния

...