gpt4 book ai didi

javascript - Typescript React componentDidMount 没有被调用

转载 作者:行者123 更新时间:2023-11-30 09:53:57 27 4
gpt4 key购买 nike

我正在尝试使用 typescript/react 运行一些示例,但由于某些原因 componentDidMount 函数没有被触发,我想将我的 AJAX 逻辑移到那里。

下面是我的代码。

var app = new MyAppApplication();

namespace MyAppApp.Components {
// props?: P, context?: any
export class HomePageView extends React.Component<any, any> {
constructor(props, context) {
super(props, context);
this.state = null;
// calling here
console.log("constructor");
}
public componentDidMount() {
// not calling here
console.log("componentDidMount");
}
public render() {
var view = this.state.map((item, index) =>
<div className="MyAppBoxContainer" key={index}>
<a href={item.Href}>{item.Title}</a>
</div>
);
return (<div>{view}</div>);
}

}
}


app.getHomeContentTitles().then(result => {
//app.logger.info(this, result);
var main = new MyAppApp.Components.HomePageView("1", result);
main.state = result;
var mainView = main.render();
ReactDOM.render(mainView, document.getElementById(app.templateContainer));
}).catch(err => {
app.logger.error(this, err);
});

我错过了什么吗?

最佳答案

不要自己调用组件的 render() 方法。另外,不要自己实例化它。此外,将 Prop 传递给您的组件,而不是直接设置状态:

改变这个:

var main = new MyAppApp.Components.HomePageView("1", result);
main.state = result;
var mainView = main.render();
ReactDOM.render(mainView, document.getElementById(app.templateContainer));

对此:

ReactDOM.render(
<MyAppApp.Components.HomePageView result={result} />,
document.getElementById(app.templateContainer)
);

如果不支持 JSX,那么你可以这样做:

ReactDOM.render(
React.createElement(MyAppApp.Components.HomePageView, { result: result}),
document.getElementById(app.templateContainer)
);

然后通过 this.props.result 而不是 this.state 访问结果:

public render() {
return (
<div>
{this.props.result.map((item, index) =>
<div className="MyAppBoxContainer" key={index}>
<a href={item.Href}>{item.Title}</a>
</div>
)}
</div>
);
}

关于javascript - Typescript React componentDidMount 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34960178/

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