【发布时间】:2018-09-19 22:54:20
【问题描述】:
在调用 API 时,我实际上在 React 中遇到了一个小问题,因为 ComponentWillMount 已被弃用。
我这样做了:
class MyClass extends Component {
constructor() {
super();
this.state = {
questionsAnswers: [[{ answers: [{ text: '', id: 0 }], title: '', id: 0 }]],
},
};
}
componentDidMount() {
this.getQuestions();
}
getQuestions = async () => {
let questionsAnswers = await Subscription.getQuestionsAndAnswers();
questionsAnswers = questionsAnswers.data;
this.setState({ questionsAnswers });
};
所以页面在没有questionsAsnwers 的情况下第一次呈现,当我得到questionAnswers 时页面被重新呈现
有没有更好的解决方案来避免重新渲染?
【问题讨论】:
-
React doc 建议将其加载到 componentDidMount reactjs.org/docs/react-component.html#componentdidmount 还有 github.com/reactjs/reactjs.org/issues/302
-
在这种情况下,第一次继续加载符号,一旦加载问题,就会改变状态,这将显示问题..也将获得良好的用户体验..更好地使用 redux,它可以让您更好地处理 api 调用和数据绑定
-
我建议不要对任何 React 组件方法使用
async关键字,因为 Promise 是不可取消的。如果在await期间卸载了组件,您将对卸载的组件调用this.setState。这就是为什么创建像Redux 这样的商店的原因; React 组件最好保持完全同步。如果您确实将异步添加到组件,请在componentDidMount中创建订阅并在componentWillUnmount中取消订阅,但我建议在 React 组件方法中完全避免使用async关键字。 -
如果你的组件第一次渲染的时候没有数据,那么就按照那个来塑造你的组件。见:stackoverflow.com/questions/49697447/…
标签: javascript reactjs api