React Native - 检查 Screen 的 render 方法
React Native - check the render method of Screen
大家好,
我正在尝试制作 React Native 选项卡的示例,但每当我尝试将一些 react-native-elements
放入组件时,它都会给我一个错误。我研究并发现很多人都面临这个错误,但它对我没有帮助。
这是我的 PostScreen
import React, { Component } from 'react';
import { Button, Text, View, FlatList, StyleSheet } from 'react-native';
import { List, ListItem } from 'react-native-elements';
import styles from '../styles';
export default class PostScreen extends React.Component {
constructor(props) {
super(props);
this.state = {
seed: 1,
page: 1,
users: [],
isLoading: false,
isRefreshing: false,
};
}
handleRefresh = () => {
this.setState({
seed: this.state.seed + 1,
isRefreshing: true,
}, () => {
this.loadUsers();
});
};
handleLoadMore = () => {
this.setState({
page: this.state.page + 1
}, () => {
this.loadUsers();
});
};
componentDidMount() {
this.loadUsers();
};
loadUsers = () => {
const { users, seed, page } = this.state;
this.setState({ isLoading: true });
fetch(`https://randomuser.me/api/?seed=${seed}&page=${page}&results=20`)
.then(res => res.json())
.then(res => {
this.setState({
users: page === 1 ? res.results : [...users, ...res.results],
isRefreshing: false,
});
})
.catch(err => {
console.error(err);
});
};
render() {
const list = [
{
name: 'Amy Farha',
avatar_url:
'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg',
subtitle: 'Vice President'
},
{
name: 'Chris Jackson',
avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg',
subtitle: 'Vice Chairman'
}
]
return (
<List containerStyle={{ marginBottom: 20 }}>
{
list.map((l) => (
<ListItem
roundAvatar
avatar={{ uri: l.avatar_url }}
key={l.name}
title={l.name}
/>
))
}
</List>
)
}
这是我的App.js
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import Icon from 'react-native-vector-icons/FontAwesome5';
import {
createSwitchNavigator,
createBottomTabNavigator,
createAppContainer
} from 'react-navigation';
import PostScreen from './src/screens/PostScreen';
import WelcomeScreen from './src/screens/WelcomeScreen';
class App extends React.Component {
render() {
return <AppNavigator />
}
}
const AppNavigator = createBottomTabNavigator(
{
WelcomeScreen: {
screen: WelcomeScreen,
navigationOptions: {
tabBarIcon: ({ tintColor }) =>
<Icon name="home" size={25} color={tintColor} />
}
},
Posts: {
screen: PostScreen,
navigationOptions: {
tabBarLabel: 'PostScreen',
tabBarIcon: ({ tintColor }) =>
<Icon name="chart-bar" size={25} color={tintColor} />
}
}
},
{
tabBarOptions: {
activeTintColor: 'orange',
inactiveTintColor: 'gray'
}
}
);
export default createAppContainer(AppNavigator);
它可以在没有任何 react-native-elements
(列表、平面列表)的情况下工作。使用像文本这样的普通标签,效果很好。
谢谢。
您收到该错误的原因是您正在导入 List
组件,该组件在 react-native-elements
中不可用。
您所要做的就是删除 List
导入并将其替换为渲染方法中的 View
组件。
这是您编辑的代码:
import { ListItem } from 'react-native-elements';
export default class PostScreen extends React.Component {
// above code...
render() {
const list = [
{
name: 'Amy Farha',
avatar_url:
'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg',
subtitle: 'Vice President'
},
{
name: 'Chris Jackson',
avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg',
subtitle: 'Vice Chairman'
}
];
return (
<View style={{ marginBottom: 20 }}>
{
list.map((l) => (
<ListItem
roundAvatar
avatar={{ uri: l.avatar_url }}
key={l.name}
title={l.name}
/>
))
}
</View>
)
}
大家好,
我正在尝试制作 React Native 选项卡的示例,但每当我尝试将一些 react-native-elements
放入组件时,它都会给我一个错误。我研究并发现很多人都面临这个错误,但它对我没有帮助。
这是我的 PostScreen
import React, { Component } from 'react';
import { Button, Text, View, FlatList, StyleSheet } from 'react-native';
import { List, ListItem } from 'react-native-elements';
import styles from '../styles';
export default class PostScreen extends React.Component {
constructor(props) {
super(props);
this.state = {
seed: 1,
page: 1,
users: [],
isLoading: false,
isRefreshing: false,
};
}
handleRefresh = () => {
this.setState({
seed: this.state.seed + 1,
isRefreshing: true,
}, () => {
this.loadUsers();
});
};
handleLoadMore = () => {
this.setState({
page: this.state.page + 1
}, () => {
this.loadUsers();
});
};
componentDidMount() {
this.loadUsers();
};
loadUsers = () => {
const { users, seed, page } = this.state;
this.setState({ isLoading: true });
fetch(`https://randomuser.me/api/?seed=${seed}&page=${page}&results=20`)
.then(res => res.json())
.then(res => {
this.setState({
users: page === 1 ? res.results : [...users, ...res.results],
isRefreshing: false,
});
})
.catch(err => {
console.error(err);
});
};
render() {
const list = [
{
name: 'Amy Farha',
avatar_url:
'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg',
subtitle: 'Vice President'
},
{
name: 'Chris Jackson',
avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg',
subtitle: 'Vice Chairman'
}
]
return (
<List containerStyle={{ marginBottom: 20 }}>
{
list.map((l) => (
<ListItem
roundAvatar
avatar={{ uri: l.avatar_url }}
key={l.name}
title={l.name}
/>
))
}
</List>
)
}
这是我的App.js
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import Icon from 'react-native-vector-icons/FontAwesome5';
import {
createSwitchNavigator,
createBottomTabNavigator,
createAppContainer
} from 'react-navigation';
import PostScreen from './src/screens/PostScreen';
import WelcomeScreen from './src/screens/WelcomeScreen';
class App extends React.Component {
render() {
return <AppNavigator />
}
}
const AppNavigator = createBottomTabNavigator(
{
WelcomeScreen: {
screen: WelcomeScreen,
navigationOptions: {
tabBarIcon: ({ tintColor }) =>
<Icon name="home" size={25} color={tintColor} />
}
},
Posts: {
screen: PostScreen,
navigationOptions: {
tabBarLabel: 'PostScreen',
tabBarIcon: ({ tintColor }) =>
<Icon name="chart-bar" size={25} color={tintColor} />
}
}
},
{
tabBarOptions: {
activeTintColor: 'orange',
inactiveTintColor: 'gray'
}
}
);
export default createAppContainer(AppNavigator);
它可以在没有任何 react-native-elements
(列表、平面列表)的情况下工作。使用像文本这样的普通标签,效果很好。
谢谢。
您收到该错误的原因是您正在导入 List
组件,该组件在 react-native-elements
中不可用。
您所要做的就是删除 List
导入并将其替换为渲染方法中的 View
组件。
这是您编辑的代码:
import { ListItem } from 'react-native-elements';
export default class PostScreen extends React.Component {
// above code...
render() {
const list = [
{
name: 'Amy Farha',
avatar_url:
'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg',
subtitle: 'Vice President'
},
{
name: 'Chris Jackson',
avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg',
subtitle: 'Vice Chairman'
}
];
return (
<View style={{ marginBottom: 20 }}>
{
list.map((l) => (
<ListItem
roundAvatar
avatar={{ uri: l.avatar_url }}
key={l.name}
title={l.name}
/>
))
}
</View>
)
}