【发布时间】:2017-10-31 22:01:58
【问题描述】:
错误信息:
React:警告 setState 在现有状态期间无法更新 过渡(例如在渲染中)
这是一个 react-native 应用程序,但我认为,这更像是一个 react 问题。
我收到标题中描述的错误。但我对原因感到困惑,我没有在任何父组件或子组件中设置状态。所以我有一个孙子组件(CardLayoutResult),它呈现一个listView,每一行呈现一个新组件(Render row),它有一个点击事件,点击它从props调用一个函数(onselectLayout)(从父组件传递(个性化组件)(父函数setCardTemplate)。然后这个父函数调用父内部状态的setState。然后发生重新渲染。
为什么点击后会出现这个错误?
父组件
export class Personalization extends Component {
constructor(props) {
super(props);
this.state = {
showModel: true,
editorState: {}
};
this.setCardTemplate = this.setCardTemplate.bind(this);
}
setCardTemplate(selectedTemplateObj){
console.log(JSON.stringify(selectedTemplateObj));
this.setState({
showModel: false,
editorState: selectedTemplateObj
});
}
render() {
return (
<View>
<CreateCardStep containerState={{showModel:this.state.showModel ,
editorState: this.state.editorState
setCardTemplate:this.setCardTemplate}} />
</View>
)
}
子组件
const CreateCardStep = (_props) => {
return (
<View>
<CardLayoutResults containerState={_props.containerState} />
</View>
);
}
大子组件
export class CardLayoutResults extends Component {
constructor(props) {
super(props);
}
render() {
return(
<View>
<ListView
RenderRow = {(data) => <RenderRow styles={styles} rowObj={data} onSelectLayout={this.props.containerState.setCardTemplate} /> }
</View>
)
}
渲染行
const RenderRow = (props) => {
let base64Image = 'data:image/png;base64,'.concat(props.rowObj.base);
return (
<View style={props.styles.templateImage}>
<TouchableHighlight onPress={() => props.onSelectLayout(props.rowObj)}>
<Image style={props.styles.thumbnail} resizeMode= {Image.resizeMode.contain} source={{uri: base64Image}}/>
</TouchableHighlight>
</View>
);
};
- 更新 这个问题似乎是在 setCardTemplate 函数中设置状态时出现的
【问题讨论】:
标签: reactjs react-native