React -native-使用JSON数据单击按钮的渲染组件



我是全新的反应天然。因此,请为我的幼稚问题道歉。

我有一个带有按钮的主屏幕。按下按钮时,我想通过另一个组件获取数据并在屏幕上显示。

我有 app.js

import React from 'react';
import { Button, View, Text } from 'react-native';
import { createAppContainer, createStackNavigator } from 'react-navigation'; // Version can be specified in package.json
import {getMovies} from "./fetchmenu.js";
class HomeScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Home Screen</Text>
          <View style={{ flex: 1, flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }}>
            <Button
              title="Menu"
                onPress={() => {
                    <getMovies />   // I want to display data as a result of button press
                  }}
            />
          </View>
      </View>
    );
  }
}
const AppContainer = createAppContainer(RootStack);
export default class App extends React.Component {
  render() {
    return <AppContainer />;
  }
}

fetchmenu.js

import React from 'react';
import { FlatList, ActivityIndicator, Text, View  } from 'react-native';
export default class getMovies extends React.Component {
  constructor(props){
    super(props);
    this.state ={ isLoading: true}
  }
  componentDidMount(){
    return fetch('https://facebook.github.io/react-native/movies.json')
      .then((response) => response.json())
      .then((responseJson) => {
        this.setState({
          isLoading: false,
          dataSource: responseJson.movies,
        }, function(){
        });
      })
      .catch((error) =>{
        console.error(error);
      });
  }
  render(){
    if(this.state.isLoading){
      return(
        <View style={{flex: 1, padding: 20}}>
          <ActivityIndicator/>
        </View>
      )
    }
    return(
          <View style={{flex: 1, paddingTop:20}}>
            <FlatList
              data={this.state.dataSource}
              renderItem={({item}) => <Text>{item.title}, {item.releaseYear}</Text>}
              keyExtractor={({id}, index) => id}
            />
          </View>
    );
  }
}

如何显示由 getMovies 创建的 flatList on homeScreen 按下按钮时?

在您的HomeScreen中设置您的状态:

state={showMovies:false}

然后在Button上单击setState{showMovies:true}。在App.js中的渲染功能中:

render() {
return (
  <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
    <Text>Home Screen</Text>
      <View style={{ flex: 1, flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }}>
        <Button
          title="Menu"
            onPress={() => {
                this.setState({showMovies:true});
              }}
        />
        {this.state.showMovies&&<GetMovies/>}
      </View>
  </View>
);
}

由于您将getMovies类导出为默认导出(未命名)对导入进行相同的操作:

错误:导入{getMovies}从./fetchmenu.js&quot;;

正确:从./fetchmenu.js;

我强烈建议您在进入真实项目之前观看一些教程。

编辑

正如@milore所述的React中所述的组件名称必须从大写字母开始。有关更多信息,请参阅此信息

constructor(props){
    super(props);
    this.state ={ isLoading: true}
}

我在this.state中没有看到dataSource,但是您正在使用

this.setState({
   isLoading: false,
   dataSource: responseJson.movies,
   }, function(){
 });

相关内容

  • 没有找到相关文章

最新更新