React native 平面列表数据未显示在屏幕上
试着做一个简单的待办事项清单。我的AddTodo组件工作正常,我不认为这是导致问题的原因,但我的平面列表没有显示数据。我不知道为什么,因为没有错误。无论是否使用滚动视图,问题都会出现 我试过搞乱项目的宽度和高度以及列表本身,但似乎没有任何效果 我的mainTodo文件:React native 平面列表数据未显示在屏幕上,react-native,expo,React Native,Expo,试着做一个简单的待办事项清单。我的AddTodo组件工作正常,我不认为这是导致问题的原因,但我的平面列表没有显示数据。我不知道为什么,因为没有错误。无论是否使用滚动视图,问题都会出现 我试过搞乱项目的宽度和高度以及列表本身,但似乎没有任何效果 我的mainTodo文件: import React, { Component } from 'react'; import { Text, View, StyleSheet, FlatList, ScrollView } from 'react-nati
import React, { Component } from 'react';
import { Text, View, StyleSheet, FlatList, ScrollView } from 'react-native';
import AddTodo from './AddTodo';
import TodoItem from './TodoItem';
class MainTodo extends Component {
constructor() {
super();
this.state = {
textInput: '',
todos: [
{ id: 0, title: 'walk rocky', completed: false },
{ id: 1, title: 'pickup dinner', completed: false }
]
};
}
addNewTodo() {
let todos = this.state.todos;
todos.unshift({
id: todos.length + 1,
todo: this.state.textInput,
completed: false
});
this.setState({
todos,
textInput: ''
});
}
render() {
return (
<View style={{ flex: 1 }}>
<AddTodo
textChange={textInput => this.setState({ textInput })}
addNewTodo={() => this.addNewTodo()}
textInput={this.state.textInput}
/>
<ScrollView>
<FlatList
style={{ flex: 1 }}
data={this.state.todos}
extraData={this.state}
keyExtractor={(item, index) => index.toString()}
renderItem={({ item }) => {
return (
<TodoItem todoItem={item} />
);
}}
/>
</ScrollView>
</View>
);
}
}
export default MainTodo;
import React,{Component}来自'React';
从“react native”导入{Text,View,StyleSheet,FlatList,ScrollView};
从“/AddTodo”导入AddTodo;
从“/TodoItem”导入TodoItem;
类MainTodo扩展组件{
构造函数(){
超级();
此.state={
文本输入:“”,
待办事项:[
{id:0,标题:'walk rocky',已完成:false},
{id:1,标题:'Picking Diner',已完成:false}
]
};
}
addNewTodo(){
让todos=this.state.todos;
todos.unshift({
id:todos.length+1,
todo:this.state.textInput,
已完成:false
});
这是我的国家({
待办事项,
文本输入:“”
});
}
render(){
返回(
this.setState({textInput})}
addNewTodo={()=>this.addNewTodo()}
textInput={this.state.textInput}
/>
index.toString()}
renderItem={({item})=>{
返回(
);
}}
/>
);
}
}
导出默认MainTodo;
我的TodoItem文件:
import React, { Component } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
class TodoItem extends Component {
render() {
const todoItem = this.props.todoItem;
return (
<View>
<TouchableOpacity style={styles.todoItem}>
<Text style={(todoItem.completed) ? { color: '#aaaaaa' } : { color: '#313131' }}>
{todoItem.title}
</Text>
</TouchableOpacity>
</View>
);
}
}
const styles = StyleSheet.create({
todoItem: {
width: 40,
height: 40,
borderBottomColor: '#DDD',
borderBottomWidth: 1,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
paddingLeft: 15
}
});
export default TodoItem;
import React,{Component}来自'React';
从“react native”导入{样式表、文本、TouchableOpacity、视图};
类TodoItem扩展了组件{
render(){
const todoItem=this.props.todoItem;
返回(
{todoItem.title}
);
}
}
const styles=StyleSheet.create({
待办事项:{
宽度:40,
身高:40,
borderBottomColor:“#DDD”,
边界宽度:1,
flexDirection:'行',
对齐项目:“居中”,
justifyContent:'之间的空间',
paddingLeft:15
}
});
将默认值导出到doitem;
在我的addtodo组件下没有显示任何内容,它只是一个空白屏幕。在
maintodo
文件中,您正在渲染addtodo组件
,但我没有看到您的addtodo组件
。因此,您可以相应地更新代码
在TodoItem
中,删除应用于TouchableOpacity
的样式
,使代码看起来像
import React, { Component } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
class TodoItem extends Component {
render() {
const todoItem = this.props.todoItem;
return (
<View>
<TouchableOpacity style={styles.todoItem}>
<Text style={(todoItem.completed) ? { color: '#aaaaaa' } : { color: '#313131' }}>
{todoItem.title}
</Text>
</TouchableOpacity>
</View>
);
}
}
const styles = StyleSheet.create({
});
export default TodoItem;
创建文本输入
和按钮
,将父级视图
设置为flexDirection:“行”
因此,当更改TextInput
时,其值在TextInput中设置,当按下按钮时,它将创建新的对象
,并将其添加到todos
中,并将TextInput
的值设置为空
最终的代码可以是
import React, { Component } from 'react';
import { Text, View, StyleSheet, FlatList, ScrollView, TextInput, Button } from 'react-native';
import TodoItem from './TodoItem';
class MainTodo extends Component {
constructor() {
super();
this.state = {
textInput: '',
todos: [
{ id: 0, title: 'walk rocky', completed: false },
{ id: 1, title: 'pickup dinner', completed: false }
]
};
}
addNewTodo = () => {
const todo = {
id: this.state.todos.length,
title: this.state.textInput,
completed: false
}
this.setState({todos: [...this.state.todos, todo ], textInput: ""})
}
render() {
return (
<View style={{ flex: 1, marginTop: 30, paddingHorizontal: 20 }}>
<View style={{flexDirection: "row", alignItems: "center", justifyContent: "space-between"}}>
<TextInput style={{borderWidth: 1, borderColor: "black"}} onChangeText={textInput => this.setState({textInput})} placeholder="Enter todo text" value={this.state.textInput} />
<Button onPress={this.addNewTodo} title="Add todo" />
</View>
<FlatList
contentContainerStyle={{flexGrow: 1}}
data={this.state.todos}
extraData={this.state.todos}
keyExtractor={(item, index) => index.toString()}
renderItem={({ item }) => {
return (
<TodoItem todoItem={item} />
);
}}
/>
</View>
);
}
}
export default MainTodo;
import React,{Component}来自'React';
从“react native”导入{Text,View,StyleSheet,FlatList,ScrollView,TextInput,Button};
从“/TodoItem”导入TodoItem;
类MainTodo扩展组件{
构造函数(){
超级();
此.state={
文本输入:“”,
待办事项:[
{id:0,标题:'walk rocky',已完成:false},
{id:1,标题:'Picking Diner',已完成:false}
]
};
}
addNewTodo=()=>{
常数todo={
id:this.state.todos.length,
标题:this.state.textInput,
已完成:false
}
this.setState({todos:[…this.state.todos,todo],textInput:“})
}
render(){
返回(
this.setState({textInput})placeholder=“Enter todo text”value={this.state.textInput}/>
index.toString()}
renderItem={({item})=>{
返回(
);
}}
/>
);
}
}
导出默认MainTodo;
在maintodo
文件中,您正在呈现AddTodo组件
,但我没有看到您的AddTodo组件
。因此,您可以相应地更新代码
在TodoItem
中,删除应用于TouchableOpacity
的样式
,使代码看起来像
import React, { Component } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
class TodoItem extends Component {
render() {
const todoItem = this.props.todoItem;
return (
<View>
<TouchableOpacity style={styles.todoItem}>
<Text style={(todoItem.completed) ? { color: '#aaaaaa' } : { color: '#313131' }}>
{todoItem.title}
</Text>
</TouchableOpacity>
</View>
);
}
}
const styles = StyleSheet.create({
});
export default TodoItem;
创建文本输入
和按钮
,将父级视图
设置为flexDirection:“行”
因此,当更改TextInput
时,其值在TextInput
中设置,当按下按钮时,它将创建新的对象
,并将其添加到todos
中,并将TextInput
的值设置为空
最终的代码可以是
import React, { Component } from 'react';
import { Text, View, StyleSheet, FlatList, ScrollView, TextInput, Button } from 'react-native';
import TodoItem from './TodoItem';
class MainTodo extends Component {
constructor() {
super();
this.state = {
textInput: '',
todos: [
{ id: 0, title: 'walk rocky', completed: false },
{ id: 1, title: 'pickup dinner', completed: false }
]
};
}
addNewTodo = () => {
const todo = {
id: this.state.todos.length,
title: this.state.textInput,
completed: false
}
this.setState({todos: [...this.state.todos, todo ], textInput: ""})
}
render() {
return (
<View style={{ flex: 1, marginTop: 30, paddingHorizontal: 20 }}>
<View style={{flexDirection: "row", alignItems: "center", justifyContent: "space-between"}}>
<TextInput style={{borderWidth: 1, borderColor: "black"}} onChangeText={textInput => this.setState({textInput})} placeholder="Enter todo text" value={this.state.textInput} />
<Button onPress={this.addNewTodo} title="Add todo" />
</View>
<FlatList
contentContainerStyle={{flexGrow: 1}}
data={this.state.todos}
extraData={this.state.todos}
keyExtractor={(item, index) => index.toString()}
renderItem={({ item }) => {
return (
<TodoItem todoItem={item} />
);
}}
/>
</View>
);
}
}
export default MainTodo;
import React,{Component}来自'React';
从“react native”导入{Text,View,StyleSheet,FlatList,ScrollView,TextInput,Button};
从“/TodoItem”导入TodoItem;
类MainTodo扩展组件{
构造函数(){
超级();
此.state={
文本输入:“”,
待办事项:[
{id:0,标题:'walk rocky',已完成:false},
{id:1,标题:'Picking Diner',已完成:false}
]
};
}
addNewTodo=()=>{
常数todo={
id:this.state.todos.length,
标题:this.state.textInput,
已完成:false
}
this.setState({todos:[…this.state.todos,todo],textInput:“})
}
render(){
返回(
this.setState({textInput})placeholder=“Enter todo text”value={this.state.textInput}/>
index.toString()}
renderItem={({item})=>{
返回(
);
}}
/>
);
}
}
导出默认MainTodo;
使用代码
mainTodo文件:
import React,{Component}来自'React';
从“react native”导入{Text,View,StyleSheet,FlatList,ScrollView};
从“.”导入AddTodo/Add
import React, { Component } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
class TodoItem extends Component {
render() {
const todoItem = this.props.todoItem;
return (
<View>
<TouchableOpacity style={styles.todoItem}>
<Text style={(todoItem.completed) ? { color: '#aaaaaa' } : { color: '#313131' }}>
{todoItem.title}
</Text>
</TouchableOpacity>
</View>
);
}
}
const styles = StyleSheet.create({
todoItem: {
width: 40,
height: 40,
borderBottomColor: '#DDD',
borderBottomWidth: 1,
backgroundColor:'red',
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'space-between',
paddingLeft: 15
}
});
export default TodoItem;