Reactjs 抽屉';抽屉打开/关闭时,s屏幕组件正在重新渲染
我有一个带有多个屏幕的主堆栈导航器,其中一个屏幕是带有动态创建屏幕的嵌套抽屉导航器Reactjs 抽屉';抽屉打开/关闭时,s屏幕组件正在重新渲染,reactjs,react-native,react-navigation,react-navigation-v5,react-navigation-drawer,Reactjs,React Native,React Navigation,React Navigation V5,React Navigation Drawer,我有一个带有多个屏幕的主堆栈导航器,其中一个屏幕是带有动态创建屏幕的嵌套抽屉导航器 <Provider store={store}> <NavigationContainer onStateChange={onStateChange}> <Stack.Navigator initialRouteName="Launch"> <Stack.S
<Provider store={store}>
<NavigationContainer onStateChange={onStateChange}>
<Stack.Navigator initialRouteName="Launch">
<Stack.Screen name="Launch" component={Launch} />
<Stack.Screen name="Login" component={Login} />
<Stack.Screen name="Home" component={Home} />
<Stack.Screen name="ChatBox" component={ChatBox} /> /* <- Here is the drawer navigator screen */
</Stack.Navigator>
</NavigationContainer>
</Provider>
/* {
const chatName=userChannels[index].friendlyName;
const screen=React.memo(()=>(
{
电流通道&&
(等待currentChannel.typing());
}}
enterChannel={()=>
enterChannel(channel.uniqueName)
}
/>
));
返回(
);
})}
标题组件是:
export default (props) => {
const { text } = props;
const navigation = useNavigation();
const logout = async () => {
try {
await AsyncStorage.removeItem('accessToken');
await AsyncStorage.removeItem('refreshToken');
} catch (e) {
//
}
navigation.navigate('Login');
};
return (
<View style={styles.header}>
<TouchableOpacity
onPress={() => navigation.dispatch(DrawerActions.openDrawer())}>
<Icon name="menu" color="#FFF" size={18} />
</TouchableOpacity>
{text && <Text style={styles.headerText}>{text}</Text>}
<Text style={styles.headerText} onPress={logout}>
Logout
</Text>
</View>
);
};
const ChatComponent = React.memo((props) => {
const {
channel,
loadEarlier,
isLoadingEarlier,
onLoadEarlier,
savedMessages,
onSend,
isTyping,
user,
onInputTextChanged,
enterChannel,
} = props;
useEffect(() => {
console.log('render ChatComponent');
enterChannel();
}, []);
return (
<GiftedChat
inverted={false}
loadEarlier={loadEarlier}
isLoadingEarlier={isLoadingEarlier}
onLoadEarlier={onLoadEarlier}
messages={savedMessages}
onSend={onSend}
user={user}
onInputTextChanged={onInputTextChanged}
isTyping={isTyping}
renderBubble={renderBubble}
renderTime={renderTime}
renderInputToolbar={renderInputToolbar}
/>
);
});
导出默认值(道具)=>{
const{text}=props;
const navigation=useNavigation();
const logout=async()=>{
试一试{
等待AsyncStorage.removeItem('accessToken');
等待AsyncStorage.removeItem('refreshToken');
}捕获(e){
//
}
导航。导航('Login');
};
返回(
navigation.dispatch(DrawerActions.openDrawer())}>
{text&&{text}
注销
);
};
聊天组件是:
export default (props) => {
const { text } = props;
const navigation = useNavigation();
const logout = async () => {
try {
await AsyncStorage.removeItem('accessToken');
await AsyncStorage.removeItem('refreshToken');
} catch (e) {
//
}
navigation.navigate('Login');
};
return (
<View style={styles.header}>
<TouchableOpacity
onPress={() => navigation.dispatch(DrawerActions.openDrawer())}>
<Icon name="menu" color="#FFF" size={18} />
</TouchableOpacity>
{text && <Text style={styles.headerText}>{text}</Text>}
<Text style={styles.headerText} onPress={logout}>
Logout
</Text>
</View>
);
};
const ChatComponent = React.memo((props) => {
const {
channel,
loadEarlier,
isLoadingEarlier,
onLoadEarlier,
savedMessages,
onSend,
isTyping,
user,
onInputTextChanged,
enterChannel,
} = props;
useEffect(() => {
console.log('render ChatComponent');
enterChannel();
}, []);
return (
<GiftedChat
inverted={false}
loadEarlier={loadEarlier}
isLoadingEarlier={isLoadingEarlier}
onLoadEarlier={onLoadEarlier}
messages={savedMessages}
onSend={onSend}
user={user}
onInputTextChanged={onInputTextChanged}
isTyping={isTyping}
renderBubble={renderBubble}
renderTime={renderTime}
renderInputToolbar={renderInputToolbar}
/>
);
});
const ChatComponent=React.memo((道具)=>{
常数{
频道
早些时候,
提前加载,
在早些时候,
savedMessages,
总之,
isTyping,
用户,
OnInputExtChanged,
进入频道,
}=道具;
useffect(()=>{
log('render ChatComponent');
进入通道();
}, []);
返回(
);
});
这是
如何避免不必要的组件渲染