【问题标题】:How do I pass data to another screen/class in react Native?如何在 React Native 中将数据传递到另一个屏幕/类?
【发布时间】:2021-01-13 14:28:57
【问题描述】:

我正在尝试将一组键值对从 UebungenAnzeigen 类传递给 PlanBeenden 类,这也是另一个屏幕。我正在使用反应导航,并且我有一个 Stacknavigator。如果您能给我一个带有我的状态参数的简单示例代码,我将非常高兴。谢谢。

class UebungenAnzeigen extends React.Component {
  

    state = {

      data:[
        {
        
          "name": "Herabschauender Hund",
          "kategorie":"anfaenger",
          "erklaerung": "Steißbein zur Decke | Rücken gerade | Kopf in Verlängerung der Wirbelsäule",
          "photo": require('./fotosAsanas/Herabschauender_Hund.png'),
          "dauer": 30
      },
         
      {
          "name": "Katze",
          "kategorie" : "geuebt",
          "erklaerung": "Steißbein zur Decke | Rücken gerade | Kopf in Verlängerung der Wirbelsäule",
          "photo": require('./fotosAsanas/Katze.png'),
          "dauer": 20
      },
      {
        "name": 'Kuh',
        "kategorie" : "eingeschraenkt",
        "erklaerung": "Steißbein zur Decke | Rücken gerade | Kopf in Verlängerung der Wirbelsäule",
        "photo": require("./fotosAsanas/Kuh.png"),
        "dauer": 20
      },
        ]
    }

    render() {
   
      return (
     
      <View>
     <Button  title="Auswahl" onPress={() => this.props.navigation.navigate('PlanBeenden',  What to put 
     in here to get the state to the next page? )}/>
    </View>
  
      );

        
  }
}


// the class that should receive the data
//What do I have to put in to receive the data of UebungAnzeigen?

class PlanBeenden extends React.Component {

  render() {
    let data = this.props.route.params?.data; //How to do this correctly for state of UebungAnzeigen?
    console.log(data)
    return (
      <View >
        <Button style={stylesButtons.button} title="Go back" onPress={() => this.props.navigation.navigate('Auswahl')} />
      </View>
      );
  }
}

【问题讨论】:

    标签: reactjs react-native navigation parameter-passing react-props


    【解决方案1】:

    以下是将数据传递到下一个屏幕的方法:

    //........
      render() {
        return (
          <View>
            <Button
              title="Auswahl"
              onPress={() =>
                this.props.navigation.navigate("PlanBeenden", { data: this.state.data })
              }
            />
          </View>
        );
      }
    }
    

    下面是工作示例:Expo Snack

    完整源代码:

    import * as React from 'react';
    import { Text, View, Button, FlatList } from 'react-native';
    import { NavigationContainer } from '@react-navigation/native';
    import { createStackNavigator } from '@react-navigation/stack';
    
    const Stack = createStackNavigator();
    
    export default function App() {
      return (
        <NavigationContainer>
          <Stack.Navigator>
            <Stack.Screen name="Home" component={UebungenAnzeigen} />
            <Stack.Screen name="PlanBeenden" component={PlanBeenden} />
            <Stack.Screen name="Auswahl" component={Auswah} />
          </Stack.Navigator>
        </NavigationContainer>
      );
    }
    
    function Auswah() {
      return <Text>Auswahl</Text>;
    }
    
    class UebungenAnzeigen extends React.Component {
      state = {
        data: [
          {
            name: 'Herabschauender Hund',
            kategorie: 'anfaenger',
            erklaerung:
              'Steißbein zur Decke | Rücken gerade | Kopf in Verlängerung der Wirbelsäule',
            dauer: 30,
          },
    
          {
            name: 'Katze',
            kategorie: 'geuebt',
            erklaerung:
              'Steißbein zur Decke | Rücken gerade | Kopf in Verlängerung der Wirbelsäule',
            dauer: 20,
          },
          {
            name: 'Kuh',
            kategorie: 'eingeschraenkt',
            erklaerung:
              'Steißbein zur Decke | Rücken gerade | Kopf in Verlängerung der Wirbelsäule',
            dauer: 20,
          },
        ],
      };
    
      render() {
        return (
          <View>
            <Button
              title="Auswahl"
              onPress={() =>
                this.props.navigation.navigate('PlanBeenden', {
                  data: this.state.data,
                })
              }
            />
          </View>
        );
      }
    }
    
    // the class that should receive the data
    //What do I have to put in to receive the data of UebungAnzeigen?
    
    class PlanBeenden extends React.Component {
      render() {
        let { data } = this.props.route.params; //How to do this correctly for state of UebungAnzeigen?
        console.log(JSON.stringify(data));
        return (
          <View>
            <Button
              title="Go back"
              onPress={() => this.props.navigation.navigate('Auswahl')}
            />
            {data && (
              <FlatList
                data={data}
                renderItem={({ item }) => <Text>{item.name}</Text>}
              />
            )}
          </View>
        );
      }
    }
    

    文档:Passing Params

    【讨论】:

    • 嘿,当我尝试您的代码时,我会在第二个屏幕上使用 const {data} = this.props.route console.log(data) 来接收数据。但控制台说未定义。你有别的想法吗?谢谢
    • 欢迎,请考虑接受答案 :)
    • 如果我将 UebungenAnzeigen 和 PlanBeenden 类的代码放在不同的文件中,那么我将如何在 PlanBeenden 中接收数据?
    • 只需将该文件导入到将要使用的组件文件中。
    【解决方案2】:

    你必须传递一个对象

    <Button  
      title="Auswahl" 
      onPress={() => this.props.navigation.navigate('PlanBeenden', {data: yourData} )}/>
    

    在您的PlanBeenden 屏幕中,您将收到参数

    class PlanBeenden extends React.Component {
      const {data} = this.props.route
      
      //const data contain the data passed
      render(
        return(
          //your UI components
        )
      )
    
    }
    
    
    

    【讨论】:

    • 我必须直接写什么来传递 wohle 对象并将其记录在控制台上?我如何访问例如对象名称的第一部分:PlanBeenden 屏幕中的 Herabschauender Hund?
    • 有没有办法通过例如const anfaenger=...,所以整个数组到另一个屏幕?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多