React native 使用JSON数据在单击按钮时反应本机呈现组件
我是一个全新的本地人。所以请为我提出的非常幼稚的问题向我道歉 我有一个有按钮的主屏幕。当按下按钮时,我想通过另一个组件获取数据并显示在屏幕上 我有App.jsReact 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
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谢谢你的帮助。我已经发布了一个后续问题,以便深入实际。以下是链接: