如何在不创建新类实例的情况下从另一个类调用我的非静态函数? -反应本机路由器流量

我在路由器文件中渲染一个右栏按钮,点击该按钮后,我想从另一个保存数据的类中调用一个函数。它不能是静态方法,因为它需要访问“此”属性。如果我声明该类的新实例,它将没有正确的数据。那我该怎么办?

导航屏幕:

env -u SESSION_MANAGER pycharm-community

添加膳食屏幕:

import React from 'react';
import {View,Text,TouchableOpacity} from 'react-native';
import { Router,Scene,actions } from 'react-native-router-flux';

import NewUserScreen from './NewUserScreen';
import AddMealScreen from './AddMealScreen';

export default function App() {

  return (
   <Router>
     <Scene key="root">
      <Scene key="newUser"
      component={NewUserScreen}
      title="App"
      initial
      />
      <Scene
        key="addMeal"
        component={AddMealScreen}
        title="Add Meal"
        renderRightButton={() =>(
          <View>
            <TouchableOpacity onPress={() => AddMealScreen.saveMeal()}>
              <Text>Add</Text>
            </TouchableOpacity>
          </View>
        )}
        />
     </Scene>
    </Router>
  );
}
iCMS 回答:如何在不创建新类实例的情况下从另一个类调用我的非静态函数? -反应本机路由器流量

您可以使用 ref

来调用子组件功能

您正在使用功能组件,因此,您必须使用 useRef 钩子

代码:

导航屏幕:

import React,{ Component,useRef } from "react";

export default function App() {
  const _AddMealScreen = useRef();

  return (
    <Router>
      <Scene key="root">
        <Scene key="newUser" component={NewUserScreen} title="App" initial />
        <Scene
          initial
          key="addMeal"
          component={() => <AddMealScreen ref={_AddMealScreen} />}
          title="Add Meal"
          renderRightButton={() => (
            <View>
              <TouchableOpacity
                onPress={() => _AddMealScreen.current.saveMeal()}
              >
                <Text>Add</Text>
              </TouchableOpacity>
            </View>
          )}
        />
      </Scene>
    </Router>
  );
}
,

正如您所述,由于它使用this,所以它不能是静态方法,不仅如此,因为它使用this,您不需要实例,但您严格需要渲染的实例。您可以通过ref来实现。

export default class App extends React.Component {
  render() {
    return (
      <Router>
        <Scene key="root">
        <Scene key="newUser" component={NewUserScreen} title="App" initial />
        <Scene
          key="addMeal"
          title="Add Meal"
          renderRightButton={() =>(
            <View>
              <TouchableOpacity onPress={() => this.mealScreen.saveMeal()}>
                <Text>Add</Text>
              </TouchableOpacity>
            </View>
          )}
        >
          <AddMealScreen ref={ref => this.mealScreen = ref} />
        </Scene>
      </Router>
    );
  }
}

希望这会有所帮助。

本文链接:https://www.f2er.com/2178858.html

大家都在问