#javascript #reactjs #react-native
#javascript #reactjs #реагировать -родной
Вопрос:
Я продолжаю получать эту ошибку при попытке получить доступ к this.state Ни одно из решений, которые я пробовал до сих пор, не работало
Вот мой конструктор
export default class Layout extends React.Component {
constructor() {
super();
this.state = {
bagTitle: 'View Bag'
}
this.renderContent = this.renderContent.bind(this);
}
render() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name='Menu' component={HomeScreen}
options={{
headerRight: () => (
<Ionicons style={iconView.icons} name='ios-list' size={26} color="black" />
),
}}
/>
</Stack.Navigator>
</NavigationContainer>
);
};
}
Здесь я вызываю функцию renderContent
class HomeScreen extends React.Component {
render() {
const title = 'View Bag'
return (
<View style={styles.container}>
<StatusBar style="auto" />
{/* Bottomsheet View */}
<BottomSheet
ref={sheetRef}
snapPoints={[100, 300, Dimensions.get('window').height - 100]}
borderRadius={10}
renderContent={renderContent}
>
<Text onPress={showBag} style={{ backgroundColor: 'red', fontSize: 17, fontWeight: '600', textAlign: 'center', position: "absolute", marginTop: 20, width: windowWidth }}>View Bag</Text>
</BottomSheet>
</View>
);
}
}
Здесь я пытаюсь получить доступ к this.state
renderContent = () => (
<View
style={{
backgroundColor: '#ecf0f1',
padding: 16,
fontSize: 20,
height: windowHeight,
width: windowWidth,
marginBottom: -200
}}
>
<Text onPress={showBag} style={{ fontSize: 17, fontWeight: '600', textAlign: 'center', position: "absolute", marginTop: 20, width: windowWidth }}>{this.state.bagTitle}</Text>
</View>
);
Продолжайте получать эту ошибку
неопределенный не является объектом (вычисление ‘_this.state’)
Комментарии:
1. @TopTalent вы случайно не знаете, в чем может быть проблема?
2. Вы использовали
renderContent={this.renderContent}
вHomeScreen
классе? Илиthis.props.renderContent
?3. Когда я их использую, нижняя таблица не отображается
4. Не могли бы вы поделиться своим репозиторием проекта? Или создать codesandbox.io ? Позвольте мне взглянуть.
5. Конечно, вот репозиторий: github.com/Jkurbs/web
Ответ №1:
Вы можете использовать showBag
и renderContent
в HomeScreen
классе
class HomeScreen extends React.Component {
constructor() {
super();
this.state = {
bagTitle: 'View Bag'
}
this.showBag = this.showBag.bind(this);
this.renderContent = this.renderContent.bind(this);
}
// FUNCTIONS
showBag = (item) => {
sheetRef.current.snapTo(1);
if (item.title !== null) {
this.setState({
bagTitle: item.title
})
console.log('ITEM: ', item);
}
}
renderContent = () => (
<View
style={{
backgroundColor: '#ecf0f1',
padding: 16,
fontSize: 20,
height: windowHeight,
width: windowWidth,
marginBottom: -200
}}
>
<Text onPress={this.showBag} style={{ fontSize: 17, fontWeight: '600', textAlign: 'center', position: "absolute", marginTop: 20, width: windowWidth }}>{this.state.bagTitle}</Text>
</View>
);
render() {
const title = 'View Bag'
return (
<View style={styles.container}>
<StatusBar style="auto" />
{/* Bottomsheet View */}
<BottomSheet
ref={sheetRef}
snapPoints={[100, 300, Dimensions.get('window').height - 100]}
borderRadius={10}
renderContent={this.renderContent}
/>
</View>
);
}
}