Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 使用JSON数据在单击按钮时反应本机呈现组件_React Native - Fatal编程技术网

React native 使用JSON数据在单击按钮时反应本机呈现组件

React native 使用JSON数据在单击按钮时反应本机呈现组件,react-native,React Native,我是一个全新的本地人。所以请为我提出的非常幼稚的问题向我道歉 我有一个有按钮的主屏幕。当按下按钮时,我想通过另一个组件获取数据并显示在屏幕上 我有App.js import React from 'react'; import { Button, View, Text } from 'react-native'; import { createAppContainer, createStackNavigator } from 'react-navigation'; // Version can

我是一个全新的本地人。所以请为我提出的非常幼稚的问题向我道歉

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

我有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 />;
  }
}
从“React”导入React;
从“react native”导入{按钮、视图、文本};
从“反应导航”导入{createAppContainer,createStackNavigator};//可以在package.json中指定版本
从“/fetchmenu.js”导入{getMovies};
类主屏幕扩展了React.Component{
render(){
返回(
主屏幕
{
//我想显示按下按钮后的数据
}}
/>
);
}
}
const-AppContainer=createAppContainer(RootStack);
导出默认类App扩展React.Component{
render(){
返回;
}
}
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>
    );
  }
}
从“React”导入React;
从“react native”导入{FlatList,ActivityIndicator,Text,View};
导出默认类getMovies.Component{
建造师(道具){
超级(道具);
this.state={isLoading:true}
}
componentDidMount(){
返回获取('https://facebook.github.io/react-native/movies.json')
.then((response)=>response.json())
.然后((responseJson)=>{
这是我的国家({
孤岛加载:false,
数据来源:responseJson.movies,
},函数(){
});
})
.catch((错误)=>{
控制台错误(error);
});
}
render(){
if(此.state.isLoading){
返回(
)
}
返回(
{item.title},{item.releaseYear}
keyExtractor={({id},索引)=>id}
/>
);
}
}
如何在主屏幕上显示由getMovies创建的平面列表
按下按钮时?

主屏幕中设置如下状态:

state={showMovies:false}
然后在
按钮上
单击
设置状态
{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>
);
}
render(){
返回(
主屏幕
{
this.setState({showMovies:true});
}}
/>
{this.state.showMovies&&}
);
}
由于您正在将
getMovies
类导出为默认导出(未命名),请执行与导入相同的操作:

错误:从“/fetchmenu.js”导入{getMovies}

正确:从“/fetchmenu.js”导入GetMovies

我强烈建议您在进入实际项目之前先看一些教程

编辑


正如@Milore所述,React中的组件名称必须以大写字母开头

在您的
主屏幕中
如下设置您的状态:

state={showMovies:false}
然后在
按钮上
单击
设置状态
{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>
);
}
render(){
返回(
主屏幕
{
this.setState({showMovies:true});
}}
/>
{this.state.showMovies&&}
);
}
由于您正在将
getMovies
类导出为默认导出(未命名),请执行与导入相同的操作:

错误:从“/fetchmenu.js”导入{getMovies}

正确:从“/fetchmenu.js”导入GetMovies

我强烈建议您在进入实际项目之前先看一些教程

编辑

正如@Milore所述,React中的组件名称必须以大写字母开头

我在
这个.state中没有看到
数据源
,但您正在使用

this.setState({
   isLoading: false,
   dataSource: responseJson.movies,
   }, function(){
 });
我在
这个.state中没有看到
数据源
,但您正在使用

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

正如您所注意到的,组件必须有一个大写的首字母“谢谢”。这很有帮助。你能用两件事来更新你的回复吗,让它对像我这样的新手更有用(a)state={showMovies:false}应该在主屏幕内;(b){this.state.showMovies&&}也应该有一个结束括号:)@AbdumutalAbdusamatov谢谢你的帮助。我已经发布了一个后续问题,以便深入实际。以下是链接:正如您所指出的,组件必须有大写的首字母名称谢谢。这很有帮助。你能用两件事来更新你的回复吗,让它对像我这样的新手更有用(a)state={showMovies:false}应该在主屏幕内;(b){this.state.showMovies&&}也应该有一个结束括号:)@AbdumutalAbdusamatov谢谢你的帮助。我已经发布了一个后续问题,以便深入实际。以下是链接: