javascript - 如何解决stackNavigator的问题

标签 javascript reactjs react-native react-redux

在此代码中,我在 ListView 上填充 json 数据..并在单击项目值后,在新屏幕上传递该特定值.. 我创建了 MainActivity,在其中填充 JSON 值,并在 SecondActivity 上发送所选项目值, 在我正在使用的类之间导航

export default MyNewProject = StackNavigator(
{
  First: { screen: MainActivity },

  Second: { screen: SecondActivity }
});

//出现错误“未定义不是函数(正在评估 '(0 _reactnavigation.stacknavigator)')”..

import React, { Component } from 'react';

    import { StyleSheet, Text, View, ListView, ActivityIndicator } from 'react-native';

    import { StackNavigator } from 'react-navigation';

    class MainActivity extends Component {

      constructor(props) {

        super(props);

        this.state = {

          // Default Value of this State.
          Loading_Activity_Indicator: true

        }
      }

      componentDidMount() {

        return fetch('https://reactnativecode.000webhostapp.com/FruitsList.php')
          .then((response) => response.json())
          .then((responseJson) => {
            let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
            this.setState({
              Loading_Activity_Indicator: false,
              dataSource: ds.cloneWithRows(responseJson),
            }, function() {

              // In this block you can do something with new state.

            });
          })
          .catch((errorMsg) => {

            console.error(errorMsg);

          });
      }

      ListViewItemSeparator = () => {
        return (
          <View
            style={{
              height: .5,
              width: "100%",
              backgroundColor: "#000",
            }}
          />
        );
      }

      Navigate_To_Second_Activity=(fruit_name)=>
        {
          //Sending the JSON ListView Selected Item Value On Next Activity.
          this.props.navigation.navigate('Second', { JSON_ListView_Clicked_Item: fruit_name });

        }

      static navigationOptions =
        {

         title: 'MainActivity',

        };


      render()
      {
        if (this.state.Loading_Activity_Indicator) {
          return (
            <View style={styles.ActivityIndicator_Style}>

              <ActivityIndicator size = "large" color="#009688"/>

            </View>
          );
        }

        return (

          <View style={styles.MainContainer}>

            <ListView

              dataSource={this.state.dataSource}

              renderSeparator= {this.ListViewItemSeparator}

              renderRow={(rowData) => <Text style={styles.rowViewContainer} 
              onPress={this.Navigate_To_Second_Activity.bind(this, rowData.fruit_name)} >{rowData.fruit_name}</Text>}

            />

          </View>
        );
      }
    }

    class SecondActivity extends Component
    {
      static navigationOptions =
      {
         title: 'SecondActivity',
      };

      render()
      {
         return(
            <View style = { styles.MainContainer }>

               <Text style = { styles.TextStyle }> { this.props.navigation.state.params.JSON_ListView_Clicked_Item } </Text>

            </View>
         );
      }
    }

    export default MyNewProject = StackNavigator(
    {
      First: { screen: MainActivity },

      Second: { screen: SecondActivity }
    });

    const styles = StyleSheet.create(
    {
      MainContainer:
      {
         justifyContent: 'center',
         flex:1,
         margin: 10

      },

      TextStyle:
      {
         fontSize: 23,
         textAlign: 'center',
         color: '#000',
      },

      rowViewContainer: 
      {

        fontSize: 17,
        paddingRight: 10,
        paddingTop: 10,
        paddingBottom: 10,

      },

      ActivityIndicator_Style:
      {

        flex: 1, 
        alignItems: 'center', 
        justifyContent: 'center',
        left: 0, 
        right: 0, 
        top: 0, 
        bottom: 0,

      }

    });

//我已经尝试过可能的事情,但没有得到解决方案..我被困住了,这可能是一件小事,但没有得到解决方案.. 我需要帮助。 谢谢

最佳答案

试试这个代码

 import React, { Component } from 'react';

        import { StyleSheet, Text, View, ListView, ActivityIndicator } from 'react-native';

        import { createStackNavigator } from 'react-navigation'

        class MainActivity extends Component {

          constructor(props) {

            super(props);

            this.state = {

              // Default Value of this State.
              Loading_Activity_Indicator: true

            }
          }

          componentDidMount() {

            return fetch('https://reactnativecode.000webhostapp.com/FruitsList.php')
              .then((response) => response.json())
              .then((responseJson) => {
                let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
                this.setState({
                  Loading_Activity_Indicator: false,
                  dataSource: ds.cloneWithRows(responseJson),
                }, function() {

                  // In this block you can do something with new state.

                });
              })
              .catch((errorMsg) => {

                console.error(errorMsg);

              });
          }

          ListViewItemSeparator = () => {
            return (
              <View
                style={{
                  height: .5,
                  width: "100%",
                  backgroundColor: "#000",
                }}
              />
            );
          }

          Navigate_To_Second_Activity=(fruit_name)=>
            {
              //Sending the JSON ListView Selected Item Value On Next Activity.
              this.props.navigation.navigate('Second', { JSON_ListView_Clicked_Item: fruit_name });

            }

          static navigationOptions =
            {

             title: 'MainActivity',

            };


          render()
          {
            if (this.state.Loading_Activity_Indicator) {
              return (
                <View style={styles.ActivityIndicator_Style}>

                  <ActivityIndicator size = "large" color="#009688"/>

                </View>
              );
            }

            return (

              <View style={styles.MainContainer}>

                <ListView

                  dataSource={this.state.dataSource}

                  renderSeparator= {this.ListViewItemSeparator}

                  renderRow={(rowData) => <Text style={styles.rowViewContainer} 
                  onPress={this.Navigate_To_Second_Activity.bind(this, rowData.fruit_name)} >{rowData.fruit_name}</Text>}

                />

              </View>
            );
          }
        }

        class SecondActivity extends Component
        {
          static navigationOptions =
          {
             title: 'SecondActivity',
          };

          render()
          {
             return(
                <View style = { styles.MainContainer }>

                   <Text style = { styles.TextStyle }> { this.props.navigation.state.params.JSON_ListView_Clicked_Item } </Text>

                </View>
             );
          }
        }

        export default MyNewProject = createStackNavigator (
            {
              First: { screen: MainActivity },

              Second: { screen: SecondActivity }
            });

        const styles = StyleSheet.create(
        {
          MainContainer:
          {
             justifyContent: 'center',
             flex:1,
             margin: 10

          },

          TextStyle:
          {
             fontSize: 23,
             textAlign: 'center',
             color: '#000',
          },

          rowViewContainer: 
          {

            fontSize: 17,
            paddingRight: 10,
            paddingTop: 10,
            paddingBottom: 10,

          },

          ActivityIndicator_Style:
          {

            flex: 1, 
            alignItems: 'center', 
            justifyContent: 'center',
            left: 0, 
            right: 0, 
            top: 0, 
            bottom: 0,

          }

        });

关于javascript - 如何解决stackNavigator的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54573155/

相关文章:

react-native - 如何使用 react-native 在数字键盘上添加 'Done' 按钮

javascript - 在具有多个提交按钮的 HTML 表单中按 "Return"

javascript - Ctrl + Enter 在 TEXTAREA 中使用 jQuery

javascript - ES5 中的 react 路由

javascript - 为什么使用 ReactJS,我无法制作对单击使用react的复选框?

ios - 使用 React Native 作为框架

javascript - Android webview如何使用webkit?

javascript - 匹配可能包含标点符号的单词边界的正则表达式

javascript - 如何根据 redux 状态使用相同的 react-router 路由绑定(bind)不同的 react 组件?

javascript - React-Native AlertIOS 风格