gpt4 book ai didi

javascript - 如何显示来自数据库的 react 项目列表

转载 作者:搜寻专家 更新时间:2023-11-01 00:47:30 25 4
gpt4 key购买 nike

我正在尝试显示数据库中的项目列表,但仅显示具有我在应用程序中登录的帐户 ID 的项目列表。

我尝试使用帐户导入以前的状态,并使用 api 中的 id 仅获取那些项目,然后我使用 componentWillMount 来呈现包含我从数据库中选择的项目的页面。我知道我不能使用静态 getDerivedStateFromProps 和 componentWillMount(“警告:使用新组件 API 的组件不会调用不安全的遗留生命周期。

StoricoView 使用 getDerivedStateFromProps() 但也包含以下遗留生命周期: componentWillMount

上面的生命周期应该被移除")

import React, { Component } from "react";
import axios from "axios";
import StoricoItems from "./Storicoitems";
import { styles } from "./styles.scss";
import { Form, Label, Input } from "components/Form";
import * as accountActionCreators from "core/actions/actions- account";
import * as contractActionCreators from "core/actions/actions-contract";
import * as assetActionCreators from "core/actions/actions-asset";
import { requestAccountAccess } from "core/libs/lib-metamask-helper";
import { withRouter } from "react-router-dom";
import { connect } from "react-redux";
import PropTypes from "prop-types";
import { bindActionCreators } from "redux";

class StoricoView extends Component {
constructor(props) {
super(props);
this.state = {
allowToProceed: false,
email: "",
receiverCode: "",
initialDate: "",
expireDate: "",
rights: "",
codiceReferto: null,
nextBtnDisabled: true,
id: "",
storico: []
};
}

componentDidMount() {
const { actions } = this.props;

requestAccountAccess(defaultAccount => {
actions.account.setDefaultAccount(defaultAccount);
actions.contract.setContract(defaultAccount);
});
}

static getDerivedStateFromProps(prevState) {
const { account } = prevState;
return { id: account.id };
}

componentWillMount() {
this.mostraStorico(this.state.id);
}

mostraStorico(id) {
axios.get("http://localhost:8080/api/assegna_consensos/" + id);
then(response => {
console.log(response.data);
this.setState({ storico: response.data }, () => {
console.log(this.state);
});
}).catch(err => console.log(err));
}

render() {
const storicoItems = this.state.storico.map((storico, i) => {
return <StoricoItems key={storico.public_key} item={storico} />;
});
return (
<div>
<h1>Storico</h1>
<ul className="container">{storicoItems}</ul>
</div>
);
}
}

function mapStateToProps(state) {
return {
account: state.account,
asset: state.asset
};
}

function mapDispatchToProps(dispatch) {
return {
actions: {
account: bindActionCreators(accountActionCreators, dispatch),
contract: bindActionCreators(contractActionCreators, dispatch)
}
};
}

StoricoView.propTypes = {
account: PropTypes.shape({
email: PropTypes.string,
receiverCode: PropTypes.string,
initialDate: PropTypes.date,
expireDate: PropTypes.date,
rights: PropTypes.string,
codiceReferto: PropTypes.string,
id: PropTypes.string
}).isRequired,
actions: PropTypes.shape({}).isRequired,
asset: PropTypes.shape({}),
history: PropTypes.shape({}).isRequired
};

StoricoView.defaultProps = {
asset: null
};

export default withRouter(
connect(
mapStateToProps,
mapDispatchToProps
)(StoricoView)
);

虽然 StoricoItems 是:

import React, { Component } from "react";
import { Link } from "react-router-dom";

class StoricoItem extends Component {
constructor(props) {
super(props);
this.state = {
products: props.products
};
}

render() {
return (
<li className="registration-form">
<ul className="container">
<li className="registration-form">
Proprietario : {this.state.products.giver}
</li>
</ul>
<ul className="container">
<li className="registration-form">
Beneficiario : {this.state.products.receiver}
</li>
</ul>
<ul className="container">
<li className="registration-form">
Data inizio consenso : {this.state.item.data_inizio}
</li>
</ul>
<ul className="container">
<li className="registration-form">
Data Fine Consenso : {this.state.item.data_fine}
</li>
</ul>
<ul className="container">
<li className="registration-form">
{" "}
Tipo consenso : {this.state.item.diritti}
</li>
</ul>
<ul className="container">
<li className="registration-form">
Referto :{this.state.item.referto}
</li>
</ul>
<br />
<br />
</li>
);
}
}
export default StoricoItem;

当然我做错了,但是什么?

最佳答案

首先,您不应该从 componentWillMount 调用 API,而是将调用移至 componentDidMount (it's better to wait for the component to be mounted before making api call)。然后你可以删除 componentWillMount 并且消息将消失。事实上,componenentWillMount 在 React v16.* 中已被弃用,并将在 React v17 中删除。为了解释发生了什么,因为您使用 componentWillMount 和 getDerivedStateFromProps 来替代 componentWillMount React 将更喜欢使用 getDerivedStateFromProps 并且不会调用 willMount 方法,这就是为什么您的 api 调用从未进行过

关于javascript - 如何显示来自数据库的 react 项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com