javascript - 如何使用 React Native 中的 props 将数组从父组件传递到子组件?
问题描述
我想将“主题”数组从SubjectsScreen到MarkAttendanceScreen并将数组项显示为 FlatList。
父组件
export default class SubjectsScreen extends Component {
state = {
subjects: ["A", "B"]
};
render() {
return (
...
<MarkAttendanceScreen subjectsArray={this.state.subjects} />
);
}
}
子组件
export default class MarkAttendanceScreen extends Component {
constructor(props) {
super(props);
this.state = {
subjects: []
};
}
componentDidMount() {
this.setState({ subjects: this.props.subjectsArray });
}
render() {
return (
<FlatList>
{ this.props.subjects.map((item, key)=>(
<Text key={key}> { item } </Text>)
)}
</FlatList>
);
}
}
解决方案
将 FlatList 与地图一起使用时,使用道具会出错。直接从 AsyncStorage 中提取值时工作正常。
export default class MarkAttendanceScreen extends Component {
state = {
subjects: [],
text: ""
}
componentDidMount() {
Subjects.all(subjects => this.setState({ subjects: subjects || [] }));
}
render() {
return (
<View>
<FlatList
data={ this.state.subjects}
renderItem={({item}) => {
return (
<View>
<Text> { item.text } </Text>
</View>
)
}}
keyExtractor={ (item, index) => index.toString()}
/>
</View>
);
}
}
let Subjects = {
convertToArrayOfObject(subjects, callback) {
return callback(
subjects ? subjects.split("\n").map((subject, i) => ({ key: i, text: subject })) : []
);
},
convertToStringWithSeparators(subjects) {
return subjects.map(subject => subject.text).join("\n");
},
all(callback) {
return AsyncStorage.getItem("SUBJECTS", (err, subjects) =>
this.convertToArrayOfObject(subjects, callback)
);
},
};
推荐阅读
- html - 我想要一行 4 个翻转盒,但在我的代码中只显示 1
- python - 是否有 IO 功能可以在 kedro 中存储经过训练的模型?
- python - 根据分组数据计算 DataFrame 模式
- python - Django 按组保留一个元素,然后在此查询集上使用属性
- typescript - 打字稿所有 lodash/fp 返回类型都是任何
- ruby-on-rails - Ruby on Rails / ActiveRecord:我如何(优雅地)从多个表中检索数据?
- java - spring boot invalid_grant 凭据错误
- angular - HTML 标签在本地工作。但是在服务器上缺少角度
- javascript - 如何表达形成img URL
- ios - UICollectionViewCompositionalLayout + UICollectionViewDiffableDataSource:有没有办法根据部分数据更改装饰视图?