javascript - ReactNative) 关于调用在 render() 中引用数据的函数的问题
问题描述
程序流程如下:
Home.js => Add.js => Detail.js => 重复...
Home.js列出帖子。
Add.js是用于输入帖子所需数据的页面。从Home.js浏览堆栈导航
Detail.js会将在Add.js中输入的数据作为参数接管,向您显示要完成的帖子的信息,然后按Done按钮移动到Home.js。
Home.js包含已完成的帖子。
如果创建了一个帖子,eatObject会被分配一个来自Detail.js的对象。
Const { eatObject } = this.props.route?params || {};
在Home.js中, state 有一个对象数组toEats。将eatObject添加到对象列表
{Object.values(toEats).map(toEat =toEat.id toEat.idToEat key={toEat.id} {...toEat} deleteToEat={this._deleteToEat} />)}
目前,每当添加帖子时,刷新按钮都会更新“Home.js”列表。但我希望在上传“Home.js”时自动更新帖子列表。我试图在“componentDidMount”中调用“_pushToEat”,但“render”中存在“eatObject”,因此似乎无法将其交给参数。我想在上传“Home.js”的组件时自动调用“_pushTooEat”。
主页.js
import React from "react";
import { View, Text, Button } from "react-native";
import ToEat from "./ToEat"
export default class Home extends React.Component {
state = {
toEats:{}
}
render() {
const { toEats } = this.state;
const { eatObject } = this.props.route?.params || {};
// error
// if (eatObject) {
// () => this._pushToEat(eatObject)
// }
return (
<View>
{Object.values(toEats).map(toEat => <ToEat key={toEat.id} {...toEat} deleteToEat={this._deleteToEat} />)}
<Button title="refresh" onPress={()=>this._pushToEat(eatObject)}/>
<View>
<Button title="Add" onPress={() => this.props.navigation.navigate("Add")} />
</View>
</View>
);
}
_deleteToEat = () => {
}
_pushToEat = (eatObject) => {
console.log("function call!")
console.log(eatObject)
this.setState(prevState => {
const newToEatObject = eatObject
const newState = {
...prevState,
toEats: {
...prevState.toEats,
...newToEatObject
}
}
return { ...newState };
})
}
}
细节.js
import React from "react";
import { View, Text, Button } from "react-native";
import uuid from 'react-uuid'
import { connect } from 'react-redux';
import { inputId } from '../src/reducers/infoReducer';
class Detail extends React.Component {
render() {
const { name, dosage, note } = this.props.route.params;
return (
<View>
<Text>name: {name}</Text>
<Text>dosage: {dosage}</Text>
<Text>note: {note}</Text>
<Button
title="Done"
onPress={() =>
this.props.navigation.navigate(
"Home", {
eatObject: this._createToEat(uuid(), name, dosage)
})
}
/>
</View>
)
}
_createToEat = (id, name, dosage) => {
const ID = id
inputId(id)
const newToEatObject = {
[ID]: {
id: ID,
name: name,
dosage: dosage,
}
}
return newToEatObject;
}
}
function mapStateToProps(state) {
return {
state: state.infoReducer
};
}
function matchDispatchToProps(dispatch) {
return {
inputId: (id) => {
dispatch(inputId(id));
},
}
}
export default connect(mapStateToProps, matchDispatchToProps)(Detail);
我想要你的建议。谢谢
解决方案
推荐阅读
- django - 考虑到其他模型字段,如何使用“MinValueValidator”?
- spring - Spring Boot 实体未更新
- aws-api-gateway - 如何在没有明确的招摇定义的情况下在 SAM 中启用“ApiKeyRequired”属性?
- python - 如何在pyqt listwidget中检查项目是否被选中
- python - 在网络浏览器中自动下载图片并使用 python 将其转换为 pdf 格式
- java - 使用扫描仪时保存的重复值。下一个()
- python - Keras 的 LSTM 层中的 4D 输入
- html - 如何仅使弹性项目溢出而不是整个父项?
- azure - Azure 数据工厂调用本地 Alteryx API
- javascript - 使用 javascript 代码显示和隐藏部分的问题不起作用