React:只能更新已安装或正在安装的组件
React: Can only update a mounted or mounting component
这是我的组件:
var booksRef = new Firebase("https://bookshelf.firebaseio.com/books");
class BookShelf extends React.Component {
constructor(props){
super(props);
this.state = {books: [] };
var self = this;
booksRef.on("value", function(snapshot){
const newbooks = [];
var firebaseBooks = snapshot.val();
for(var bookId in firebaseBooks){
newbooks.push({key: bookId, book: firebaseBooks[bookId]});
}
var newState = self.state;
newState.books = newbooks;
self.setState(newState);
});
}
...
当我第一次导航到此组件时,没有问题。但是,当我导航到另一个组件,然后再次返回到此组件时,我在控制台中收到以下警告:
Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op. Please check the code for the component.
我想在处理组件之前我需要做点什么,但我不知道为什么。
对于您的问题,上面类构造函数中的所有代码都是在安装其本质:componentWillMount之前完成的,因此逻辑只在此时运行。
现在一切都很好,但问题很复杂——购买firebase的异步请求。过去有一个名为isMounted的方法,您只需对其进行检查,但现在该方法已被弃用,您的场景的最佳实践概述如下:https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
查看此博客文章,了解解决此问题的其他(但很技巧)方法:http://jaketrent.com/post/set-state-in-callbacks-in-react/
滚动到es6部分,第一个部分并不直接相关。
附加:
看看这篇babel博客文章:特别是关于课程的部分:不确定你是否需要它,但它的很好
https://babeljs.io/blog/2015/06/07/react-on-es6-plus
相关文章:
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 可以前端maven插件使用节点,npm已经安装
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- KnockoutJS-组件-多个实例
- 如何更改reactjs中外部/独立组件的状态或属性
- React:只能更新已安装或正在安装的组件
- 如何在 React 组件上强制重新安装
- React:新安装的子组件无法访问父组件引用
- 如何在Meteor Angular应用程序中安装bower组件
- React Router-在嵌套组件中安装组件
- 在收到适当的状态之前安装React组件
- 在安装或安装组件上的React抛出错误可能是由于对setState()的快速和频繁调用
- 将wer组件安装到两个不同的目录中
- 只能更新已安装或正在安装的组件.这通常意味着在未挂载的组件上调用setState()
- 组件安装前反应设置滚动位置
- 约曼手动安装组件
- ReactJS中已安装组件的findDOMNode