使用 React,我使用了以下功能组件useEffect()
:
import React, { useEffect } from 'react';
import { connect } from 'react-redux';
const MessagingComponent = React.memo(({ loadMessages, messages, ...props }) => {
useEffect(() => {
loadMessages();
});
return <div {...props}>These are the messages</div>;
});
const mapDispatchToProps = dispatch => ({
loadMessages: () => dispatch({ type: 'LOAD_MESSAGES' })
});
const mapStateToProps = state => {
return {
messages: state.chatt.messages.chatMessages
};
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(MessagingComponent);
如您所见,我有一个效果回调,它在我loadMessages()
的useEffect()
回调中调用函数MessagingComponent
:
useEffect(() => {
loadMessages();
});
调用loadMessages()
加载消息导致组件重新渲染。这种行为符合预期,但问题是重新渲染会导致useEffect()
钩子再次触发,从而导致loadMessages()
再次调用。这反过来从后端加载消息并导致组件再次呈现,并且循环重复。
我怎样才能避免这种情况?我应该简单地在useEffect()
钩子中放置一个 if 条件,并检查消息属性吗?