Как сделать массив состояний в компоненте реакции. массив доступен в состоянии, но при отображении показывает неопределенный - PullRequest
1 голос
/ 12 апреля 2019

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

Я пытался использовать redux, и та же самая проблема произошла, теперь использовал responsen, но то же самое происходит.

import React from "react";
import {setGlobal} from "reactn";
import ReactDOM from "react-dom";
import Apps from "./Apps";

setGlobal({  names:[],})

ReactDOM.render( <Apps/>, document.getElementById("root"))
ReactDOM.render(<Apps/>, document.getElementById("root"))`

-----App.js----------

import React from "reactn";
import db from "./firebase";

class Apps extends React.Component{

    componentDidMount(){
        db.collection("users").get().then((snapshot)=>{

            snapshot.forEach((doc)=>{

            const user=  {name:doc.data().name,
               weight:doc.data().weight,
             id:doc.id}
             this.global.names.push(user)
          })       
    })
}

render(){
        ///this show the data in names array of state
        console.log(this.global)
        //// this show undefind (its having data)
        console.log(this.global.names[0])
        return(
            ///but while rendering its not showing anything
            <div>{this.global.names.map((name)=>(
                <h1>weight is {name.weight} </h1>
            )
            )}</div>
        )
    }
}

export default Apps;

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

вместо

this.global.names.push(user)

Вы должны использовать

this.setGlobal(names: names.push(user))
0 голосов
/ 12 апреля 2019

Я думаю, что не используйте глобальную переменную в реакции, просто сделайте что-то подобное

class Apps extends React.Component {

constructor(props) {
    super(props)
    this.state = {
        names: [],
    }
}

componentDidMount() {

    let array = [];
    db.collection("users").get()
        .then((snapshot) => {

            snapshot.forEach((doc) => {

                const user = {
                    name: doc.data().name,
                    weight: doc.data().weight,
                    id: doc.id
                }
                array.push(user)
            })
        })
        .then(() => {
            this.setState({
                names : array
            })
        })
}

render() {
    ///this show the data in names array of state
    console.log(this.state.names)
    //// this show undefind (its having data)
    console.log(this.state.names[0])
    return (
        ///but while rendering its not showing anything
        <div>{this.state.names.map((name) => (
            <h1>weight is {name.weight} </h1>
        )
        )}</div>
    )
}
}

export default Apps;

Попробуйте и скажите мне, если это работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...