【问题标题】:React native navigate to another class反应原生导航到另一个类
【发布时间】:2021-01-02 20:56:15
【问题描述】:

您好,我正在使用 stacknavigator 进行本机反应,这是我的代码

import { NavigationContainer } from '@react-navigation/native';
import {Main} from "./Main";
import {Detail} from "./Detail";
import { createStackNavigator } from '@react-navigation/stack';

const Stack = createStackNavigator();

function App() {
       return (
      <NavigationContainer>
      <Stack.Navigator initialRouteName="Main">
        <Stack.Screen name="Main" component={Main} />
        <Stack.Screen name="Detail" component={Detail} />
      </Stack.Navigator>
    </NavigationContainer>     
    )  
}
export default App;

在主页上工作正常。我想导航到带有道具数据的详细信息页面。

主页。

import { NavigationContainer } from '@react-navigation/native'; 
import { useNavigation } from '@react-navigation/native';



    export  class Main  extends Component {
    
        constructor(props) {
            super(props);
          this.state = {
            dataSource: [],
            
      
          };
        }
      

....

<Button
        title="Go to Details"
        onPress={() => navigation.navigate('Detail')}

当我按下按钮时,它会说

也试过这个,但它给出了另一个错误。

我该如何浏览它。谢谢

import { useNavigation } from '@react-navigation/native';

function Main  () {
  const navigation = useNavigation();
          />

我更改了导航代码,现在它可以导航了

<Button
        title="Go to Details"
        onPress={() => this.props.navigation.navigate('Details',{list:this.state.dataSource})  }
      />

在详细信息屏幕中 我必须设置状态数据来自道具。就这部分

const { yourParam } = this.props;

export  class Details extends Component {

    constructor() {
      super();
      this.state = {
        dataSource: [],
      
  
      };
    }

【问题讨论】:

    标签: reactjs react-native navigation


    【解决方案1】:

    你不需要useNavigation()(你不能在类组件中使用钩子)你必须使用导航道具。

    this.props.navigation.navigate('Detail')
    

    您可以将参数添加到导航功能。

    this.props.navigation.navigate('Detail', { yourParam: someData });
    

    在您的 Detail 组件上,您将能够获取参数。

    const Detail = ({ route }) => {
       const { yourParam } = route.params;
    
       console.log(yourParam);
    
       return (
         <View />
       );
    }
    

    类:

    const { yourParam } = this.props;
    
    export  class Details extends Component {
    
        constructor() {
          super();
          this.state = {
            dataSource: [],
          
      
          };
        }
        componentDidMount() {
           console.log(this.props.route.params)
        }
       render() {
         return (<View />) 
       }
    }
    

    【讨论】:

    • 嗯,是的,这种类型工作正常,但我如何通过导航将数据传递到详细信息页面。在 main 我声明为 this.state = { dataSource: [], 那么如何将它传递到详细信息页面。谢谢
    • 我不能让你检查我编辑的问题
    • 我认为您确实需要先检查 OOP 的实际工作方式。你不能在课堂外使用ˋthis`。控制台在构造函数中记录您的 this.props.route.params ,您将看到所有路由参数。
    • 是的,我现在确实可以在课堂上使用“this”,但是当我把 this.props 放在课堂上时,它说不能在这里声明 const。只需获取道具数据并将其设置为状态
    • 你需要处理组件的生命周期。安装组件时尝试控制台记录 this.props。检查修改后的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2021-03-23
    • 2017-06-09
    • 2020-11-26
    • 1970-01-01
    相关资源
    最近更新 更多