我有一个列表应用程序,用户可以在其中添加多个类别的项目,当他们想要添加新记录时,有3个相关屏幕具有此特定功能。所有这些屏幕都具有<Header/>
组件,因此我认为HoC在这里会很好,这样我可以在3个屏幕上重复使用它。
但是,我无法做到这一点。
这是我到目前为止尝试过的:
这是我的HoC课
import React, { Component } from 'react';
import { View, StyleSheet, Text, StatusBar } from 'react-native';
import Header from '../components/Header';
const NewAd = (WrappedComponent) => {
class NewAdHoc extends Component {
handleBackPress = () => {
this.props.navigation.navigate('Home');
StatusBar.setBarStyle('dark-content', true);
}
render() {
const {contentText, children} = this.props
return (
<View style={styles.container}>
<Header
headerText={'Yeni ilan ekle'}
onPress={this.handleBackPress}
/>
<View style={styles.contentContainer}>
<Text style={styles.contentHeader}>{contentText}</Text>
<WrappedComponent/>
</View>
</View>
);
}
}
return NewAdHoc;
}
这是我的屏幕:
class NewAdScreen extends Component {
render() {
const Content = () => {
return (
<View style={styles.flatListContainer}>
<ListViewItem />
</View>
);
}
return (
NewAdHoc(Content)
)
}
}
此后我遇到错误
TypeError: (0 , _NewAdHoc.NewAdHoc) is not a function(…)
,我不知道该如何解决,因为这是我第一次在本地应用程序上使用hocs。我已经看到了为什么会出现此错误,并且他们建议以这种方式导入组件:
import {NewAdHoc} from '../hocs/NewAdHoc';
但是即使这样也不能解决。
我们将不胜感激,谢谢。
答案 0 :(得分:1)
HOC
的主要目的是封装和重用跨组件的stateful
逻辑。由于您只是重用一些jsx
而未向WrappedComponent
中注入任何内容,因此您应该在此处使用常规组件:
const NewAd = ({ contentText, children }) => {
handleBackPress = () => {
this.props.navigation.navigate('Home');
StatusBar.setBarStyle('dark-content', true);
}
return (
<View style={styles.container}>
<Header
headerText={'Yeni ilan ekle'}
onPress={this.handleBackPress}
/>
<View style={styles.contentContainer}>
<Text style={styles.contentHeader}>{contentText}</Text>
{children}
</View>
</View>
);
}
并像这样使用它
return(
<>
<NewAd>
<Screen1 />
</NewAd>
<NewAd>
<Screen2 />
</NewAd>
<NewAd>
<Screen3 />
</NewAd>
</>
)