【发布时间】:2020-08-11 23:05:27
【问题描述】:
我有从另一个类设置我的状态的功能,但是我收到了以下错误
已超过最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。 React 限制了嵌套更新的数量以防止无限循环。
这是我的代码
constructor(props) {
super(props)
this.state = { loading: true, showAction: false }
setTimeout(() => {
StatusBar.setBackgroundColor(primary)
}, 100)
}
async componentWillMount() {
await Font.loadAsync({
Roboto: require("native-base/Fonts/Roboto.ttf"),
Roboto_medium: require("native-base/Fonts/Roboto_medium.ttf"),
Ionicons: require("@expo/vector-icons/build/vendor/react-native-vector-icons/Fonts/Ionicons.ttf"),
});
this.setState({ loading: false });
}
setShowAction = (isShowAction) => {
console.log(isShowAction)
this.setState({
showAction: isShowAction
})
}
...
<ChatListScreen onAction={(isShowAction) => this.setShowAction(isShowAction)}/>
...
const ChatListScreen = ({ onAction }) => {
return (
<ChatList onAction={(isShowAction) => onAction(isShowAction)}/>
)
}
...
const ChatList = ({ onAction }) => {
const [selectMode, setSelectMode] = useState(false)
const chatListDummy = []
const [selectedItem, setSelectedItem] = useState([])
{selectMode ? onAction(true) : onAction(false)}
return (
<FlatList
data= {chatListDummy}
keyExtractor= {chat => chat.id}
renderItem= {({item}) => {
}}/>
)
}
export default ChatList
谁能帮忙?
【问题讨论】:
-
你能告诉我们
ChatListScreen代码吗? -
您可能需要在代码中使用箭头函数。当您没有正确绑定您的方法时,反应开始连续调用它们......这会导致最大更新深度超出错误
-
{selectMode ? onAction(true) : onAction(false)} 嗨,你在哪里使用这个?在渲染或函数或生命周期中?
-
如何将
{selectMode ? onAction(true) : onAction(false)}放入useEffect
标签: reactjs react-native react-state-management