我正在使用react 16.3.0-alpha 1,我正在尝试创建一个ref来检查我的组件是否已安装,以避免出现"只能更新已安装或正在安装的组件"警告。我正在我的componentDidMount函数中检查ref,但它从来没有ref的任何值,因此它从来没有进入if语句。有人知道该让谁来做裁判吗?
constructor(props) {
super(props);
this.productCard = React.createRef();
}
componentDidMount() {
this.props.dispatch(handleLoadProduct(this.props.product.id)).then((data) => {
if (data.response && data.response.images) {
let images = data.response.images.map(img => {
return 'https://b2b.martinsmart.com/productimages/' + img.original;
});
if (this.productCard) {
this.setState({imgArray: images});
}
}
});
}
和观点:
<View
ref={(pc) => this.productCard = pc}
style={{height: '100%', backgroundColor: '#D6D6D6'}}
>
您可以使用常规实例变量,而不是在使用setState
之前使用ref
来检查组件是否仍在安装。
示例
class App extends React.Component {
mounted = true;
componentDidMount() {
this.props.dispatch(handleLoadProduct(this.props.product.id)).then(data => {
if (!this.mounted) {
return;
}
if (data.response && data.response.images) {
let images = data.response.images.map(img => {
return "https://b2b.martinsmart.com/productimages/" + img.original;
});
this.setState({ imgArray: images });
}
});
}
componentWillUnmount() {
this.mounted = false;
}
// ...
}