如何在 React Native 中使用 HoC
How to use HoC with React Native
我有一个列表应用程序,用户可以在其中为多个类别添加项目,当他们想要添加新记录时,有 3 个相关屏幕具有此特定功能。所有这些屏幕都有 <Header/>
组件,所以我认为 HoC 在这里会很好,这样我就可以在 3 个屏幕上重复使用它。
但是,我无法完成它。
这是我到目前为止尝试过的方法:
这是我的 HoC class
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(…)
而且我不知道该如何修复它,因为这是我第一次在 react-native 应用程序上使用 hocs。我已经查看了为什么会出现此错误,他们建议以这种方式导入组件:
import {NewAdHoc} from '../hocs/NewAdHoc';
但即使这样也没有解决。
如有任何帮助,我们将不胜感激。
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>
</>
)
我有一个列表应用程序,用户可以在其中为多个类别添加项目,当他们想要添加新记录时,有 3 个相关屏幕具有此特定功能。所有这些屏幕都有 <Header/>
组件,所以我认为 HoC 在这里会很好,这样我就可以在 3 个屏幕上重复使用它。
但是,我无法完成它。
这是我到目前为止尝试过的方法:
这是我的 HoC class
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(…)
而且我不知道该如何修复它,因为这是我第一次在 react-native 应用程序上使用 hocs。我已经查看了为什么会出现此错误,他们建议以这种方式导入组件:
import {NewAdHoc} from '../hocs/NewAdHoc';
但即使这样也没有解决。
如有任何帮助,我们将不胜感激。
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>
</>
)