【问题标题】:Screen needs to be re-rendered to show Real-Time data in React-Native屏幕需要重新渲染以在 React-Native 中显示实时数据
【发布时间】:2020-03-21 17:09:04
【问题描述】:

我正在使用 componentDidMount 在 React-Native 应用程序中显示 Firebase 实时数据,但是,当我第一次渲染时,没有显示数据。我需要返回并再次导航到页面以更新数据并显示在屏幕上。如何解决此问题并在第一次尝试时显示数据?谢谢。

export default class ForthPage extends Component {
    constructor() {
        super();
        this.state = {
            reservas: []
        }
    }

    componentDidMount() {
        const readUsersData = () => {
            const nameRef = firebase.database().ref('user0001')
            nameRef.on('value', (snapshot) => {
                const state = snapshot.val();
                this.state.reservas = state; //misstake(see my answer)
            });
        }
        readUsersData()
        const pushAdminData = (data) => {
            this.setState({ data })
        }
        pushAdminData(this.state.reservas);
    }

    render() {
        const reservas = JSON.stringify(this.state.reservas);

        return (
            <Background>
                <View>
                    <ScrollView>
                        <Text> Mis reservas: {reservas}</Text>
                    </ScrollView>
                </View>
            </Background>
        )
    }
}

【问题讨论】:

    标签: react-native firebase-realtime-database render mount


    【解决方案1】:

    readUsersData() 函数的调用似乎不清楚。 尝试在与 render,componentDidMount 相同的级别定义函数。

    如下所示

    constructor() {
        super()
        this.state = {
            reservas: []
        }
    }
    componentDidMount() {
      const readUsersData = ()=> {
        const nameRef =  firebase.database().ref('user0001')
        nameRef.on('value', (snapshot)=> {
          const state = snapshot.val()
          this.setState({reservas:state}) })
    }
    readUsersData();
    }
    

    这将完成这项工作。

    【讨论】:

    • 谢谢。只需更改 readUsersData 函数的位置即可使其工作。
    • 请在下面查看我自己的答案,了解如何在功能组件中读取实时数据。
    【解决方案2】:

    在功能组件中使用hooksFirebase 读取实时数据将类似于:

    
        const [reservas, handleReservas] = useState([]);
        const db = () => firebase.database();
    
        useEffect(() => {
            db();
            console.log('Mounted ');
        });
    
        useEffect(() => {
            db().ref('/').on('value', handleReservas);
        }, []); 
    
    

    【讨论】:

      猜你喜欢
      • 2022-11-18
      • 2017-04-20
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2020-07-24
      • 1970-01-01
      相关资源
      最近更新 更多