更改路线时反应本机重新渲染

时间:2019-12-05 19:03:47

标签: javascript reactjs firebase react-native

我正在使用一个函数从名为“ MainScreen”的屏幕上的Firebase数据库中获取数据 而且我还使用MainScreen上的按钮转到“ ChangeScreen”并更新Firebase数据库上的数据。 问题是:当我从ChangeScreen返回MainScreen时,没有任何东西再次触发获取功能,并且我需要手动更新。

(尝试过:Backhandler,componentWill(很多))

MainScreen.js:

import React, { Component } from 'react'
import { Text, Button } from 'react-native'
import firebase from 'firebase'
import PTRView from 'react-native-pull-to-refresh'

export default class MainScreen extends Component {
    constructor(props) {
        super(props)
        this.state = {
          Data: []
        }

        this._LoadTecs = this.LoadTecs.bind(this)
        this._refresh = this.refresh.bind(this)
      }

    LoadTecs = () => {

        let that = this

        firebase.database().ref('Database').once('value', (data) => {
            let dados = data.toJSON()
            this.setState({Data: dados})
        }).catch((error) => {
          console.log(error)
        })
    }

  async componentWillMount() {
    this.LoadTecs()
  }

  refresh = () => {
    this._LoadTecs()
  }

 render() {
    return (
        <PTRView onRefresh={() => this._refresh()} >
            <Text>{this.state.Data}</Text>
            <Button
              title="Navigate to ChangeScreen"
              onPress={() => this.props.navigation.navigate('ChangeScreen')}
            />
        </PTRView>
    );
  }
}

ChangeScreen.js

import React, { Component } from 'react'
import { Button, View, Text} from 'react-native'
import firebase from 'firebase'


export default class ManageScreen extends Component {

  render() {
    return (
        <View>
            <Text>Here you delete the entire database</Text>
            <Button
              title="Navigate to ChangeScreen"
              onPress={() => firebase.database().ref('Database').remove()}
            />
            <Button
              title="Navigate to ChangeScreen"
              onPress={() => this.props.navigation.navigate('ChangeScreen')}
            />
        </View>
    );
  }
}

index.js(我的导航器)

import React, { Component } from 'react'
import { createStackNavigator, createAppContainer } from 'react-navigation'
import MainScreen from './screens/MainScreen'
import ChangeScreen from './screens/ChangeScreen'
import firebase from 'firebase'

const AppSwitchNavigator = createStackNavigator(
  {
    MainScreen: { screen: MainScreen },
    ChangeScreen: { screen: ChangeScreen }
  }
);

const AppContainer = createAppContainer(AppSwitchNavigator)

class App extends Component {

  componentWillMount(){
    //Here i start my firebase btw
  }

  render() {
    return(
      <AppContainer />
    );
  }
}

export default App;

这只是示例代码

1 个答案:

答案 0 :(得分:0)

解决方案是:

从主屏幕上

更改:

[...]
async componentWillMount() {
   this.LoadTecs()
}
[...]

收件人:

[...]
async componentWillMount() {
   this.focusListener = this.props.navigation.addListener('didFocus', () => {
      this.LoadTecs()
   })
   }
[...]

感谢Calvin Nunes