在渲染函数中调用 return JSX 元素的函数
calling functions that return a JSX element in render function
我正在尝试通过调用包含独立 JSX 元素的 class 方法来缩短 render()
方法的长度以提高可读性。
问题是这一技术不适用于多个 JSX 元素。
我将每个元素嵌入到 <View>
中,但它并不能防止出现此错误
Invariant Violation : Text strings must be rendered within a <Text> component.
import React, { Component } from 'react';
import { Text, View,StyleSheet } from 'react-native';
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center"
}})
export default class HelloWorldApp extends Component {
header() {
return (
<Text>header</Text>
);
}
firstElement() {
return (
<Text>first element</Text>
);
}
secondElement() {
return (
<Text>second element</Text>
);
}
footer(){
return (
<Text>footer</Text>
);
}
render() {
let header = this.header();
let firstElement = this.firstElement();
let secondElement= this.secondElement();
let footer = this.footer();
return (
<View style={styles.container}>
header,
firstElement,
secondElement,
footer,
</View>
);
}
}
我知道 render()
中的语法不正确,这是为了向您展示我希望代码的样子。
问题出在你的 return 你忘记用 {braces} 包装你的函数。请参阅 以获得更好的解释。
改为:
return (
<View style={styles.container}>
{header}
{firstElement}
{secondElement}
{footer}
</View>
);
return (
<View style={styles.container}>
{header()}
{firstElement()}
{secondElement()}
{footer()}
</View>
);
但是您可以制作自己的组件并导入它们,而不是那样做。
您的错误指出:您在 <Text>
组件之外有字符串文本。在您的代码中,您的 header 文本和逗号 ( , ) 是问题所在。修复方法如下:
return (
<View style={styles.container}>
{header}
{firstElement}
{secondElement}
{footer}
// or you can directly use your functions
/*
{this.header()}
{this.firstElement()}
{this.secondElement()}
{this.footer()}
*/
</View>
);
P/s:如果您仍然不明白为什么会出现错误,您可以试试这个:
return (
<View style={styles.container}>
<Text>
header
firstElement,
secondElement,
footer,
</Text>
</View>
);
我正在尝试通过调用包含独立 JSX 元素的 class 方法来缩短 render()
方法的长度以提高可读性。
问题是这一技术不适用于多个 JSX 元素。
我将每个元素嵌入到 <View>
中,但它并不能防止出现此错误
Invariant Violation : Text strings must be rendered within a <Text> component.
import React, { Component } from 'react';
import { Text, View,StyleSheet } from 'react-native';
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center"
}})
export default class HelloWorldApp extends Component {
header() {
return (
<Text>header</Text>
);
}
firstElement() {
return (
<Text>first element</Text>
);
}
secondElement() {
return (
<Text>second element</Text>
);
}
footer(){
return (
<Text>footer</Text>
);
}
render() {
let header = this.header();
let firstElement = this.firstElement();
let secondElement= this.secondElement();
let footer = this.footer();
return (
<View style={styles.container}>
header,
firstElement,
secondElement,
footer,
</View>
);
}
}
我知道 render()
中的语法不正确,这是为了向您展示我希望代码的样子。
问题出在你的 return 你忘记用 {braces} 包装你的函数。请参阅
改为:
return (
<View style={styles.container}>
{header}
{firstElement}
{secondElement}
{footer}
</View>
);
return (
<View style={styles.container}>
{header()}
{firstElement()}
{secondElement()}
{footer()}
</View>
);
但是您可以制作自己的组件并导入它们,而不是那样做。
您的错误指出:您在 <Text>
组件之外有字符串文本。在您的代码中,您的 header 文本和逗号 ( , ) 是问题所在。修复方法如下:
return (
<View style={styles.container}>
{header}
{firstElement}
{secondElement}
{footer}
// or you can directly use your functions
/*
{this.header()}
{this.firstElement()}
{this.secondElement()}
{this.footer()}
*/
</View>
);
P/s:如果您仍然不明白为什么会出现错误,您可以试试这个:
return (
<View style={styles.container}>
<Text>
header
firstElement,
secondElement,
footer,
</Text>
</View>
);