Javascript 使用componentDidUpdate更改组件中的状态
我有两个组件放在一个容器中。一个是调用出版物的Javascript 使用componentDidUpdate更改组件中的状态,javascript,reactjs,typescript,axios,Javascript,Reactjs,Typescript,Axios,我有两个组件放在一个容器中。一个是调用出版物的Id,另一个是调用特定publicationId的发行日期 当我调用Id例如100时,它也会从该Id加载问题。之后,我还可以在issueDate上进行筛选。但是,当我再次使用Id更改组件以获得其他问题列表时,它将不会使用这些问题重新提交组件 我听说使用componentDidMount解决了这个问题,但我不知道在这个步骤之后该怎么办: public componentDidUpdate(): void { const{ data, date
Id
,另一个是调用特定publicationId
的发行日期
当我调用Id
例如100
时,它也会从该Id
加载问题。之后,我还可以在issueDate
上进行筛选。但是,当我再次使用Id
更改组件以获得其他问题列表时,它将不会使用这些问题重新提交组件
我听说使用componentDidMount
解决了这个问题,但我不知道在这个步骤之后该怎么办:
public componentDidUpdate(): void {
const{ data, date } = this.state
if (this.state.data !== data) {
//don't know what to do in this if statement
}
这是使用axios获取出版物Id
的代码:
constructor(props: TTestProductionProgressStatus) {
super(props);
this.state = {
date: null,
data: undefined,
prodItem: []
};
}
public componentDidMount(): void {
const urlDate = this.props.location.pathname.split("/")[3];
const date = urlDate
? new Date(
`${urlDate.substr(0, 4)}-${urlDate.substr(4, 2)}-${urlDate.substr(
6,
2
)}T00:00:00.000+01:00`
)
: null;
axios
.get<Definitions.ProductionProgressStatus[]>(
"http://app30:665/v1/productionProgressStatus/crud?publicationId=" +
this.props.id
)
.then(res => {
this.setState(
{
data: res.data
},
() => this.handleDateChange(date)
);
})
.catch(error => console.log(error.response));
}
构造函数(道具:TTestProductionProgressStatus){
超级(道具);
此.state={
日期:空,
数据:未定义,
项目:[]
};
}
公共组件didmount():void{
const urlDate=this.props.location.pathname.split(“/”[3];
const date=urlDate
?新日期(
`${urlDate.substr(0,4)}-${urlDate.substr(4,2)}-${urlDate.substr(
6.
2.
)}T00:00:00.000+01:00`
)
:null;
axios
.得到(
"http://app30:665/v1/productionProgressStatus/crud?publicationId=" +
这是道具id
)
。然后(res=>{
这是我的国家(
{
数据:res.data
},
()=>此.HandleDate更改(日期)
);
})
.catch(error=>console.log(error.response));
}
首先要说明的是,您的比较不正确:
const{ data, date } = this.state
if (this.state.data !== data) {
在这里,您正在将this.state.data
与this.state.data
进行比较;你只是用两种不同的方法提取它,但是你比较的是相同的属性。比较新旧状态的方法是:
至于在if语句中执行的操作,您可能希望对
setState
进行某种调用,这将导致另一次更新。一般来说,最好尽可能避免层叠更新,这样就不会不必要地引发两种不同的重新渲染;换句话说,如果您发现有机会在不使用componentdiddupdate
的情况下更改内容,那就更好了。首先要解决的是您的比较不正确:
const{ data, date } = this.state
if (this.state.data !== data) {
在这里,您正在将this.state.data
与this.state.data
进行比较;你只是用两种不同的方法提取它,但是你比较的是相同的属性。比较新旧状态的方法是:
至于在if语句中执行的操作,您可能希望对
setState
进行某种调用,这将导致另一次更新。一般来说,最好尽可能避免层叠更新,这样就不会不必要地引发两种不同的重新渲染;换句话说,如果您有机会在不使用componentdiddupdate
的情况下更改内容,那就更好了。谢谢您让我的问题更具可读性。我对stack还不熟悉,但是让别人慢慢来是很感激的。谢谢你让我的问题更具可读性。我是个新手,但让别人慢慢来是很感激的。