【发布时间】:2020-02-23 13:09:16
【问题描述】:
我试图在返回方法中打印时将 react-native jsx 元素存储在变量中,但出现如下错误:文本字符串必须在组件内呈现。 下面是我的代码我得到了错误。任何帮助将不胜感激:
import { Text, View, Button } from 'react-native';
import React, { useState } from 'react';
const GameScreen = (props) => {
const [num, setNum] = useState(0);
const [randNum, setRandNum] = useState(0);
const [currentNum, setCurrentNum] = useState('')
// const [jsxVal, setJsxVal] = useState('')
let jsxVal = '';
const setRandomNum = (num, min, max) => {
const randNum = Math.floor(Math.random() * (max - min)) + min
setNum(num);
setRandNum(randNum);
console.warn("Number is:" + num + " and random number:" + randNum);
}
const checkNum = (num) => {
if (num < randNum) {
jsxVal = <Text>Your number {num} is lower than {randNum}</Text>;
console.warn("if")
} else if (num === randNum) {
jsxVal = <Text>Your number {num} is greater than {randNum}</Text>;
console.warn("else if")
} else {
jsxVal = <Text>Your number {num} is greater than {randNum}</Text>;
console.warn("else")
}
console.warn("checkNum")
}
return (
<View>
{
num === 0 ? setRandomNum(props.navigation.getParam('number'), 1, 100) : null
}
<Text>Value is :{num}</Text>
<View style={{
justifyContent: 'space-around',
paddingHorizontal: 8,
paddingVertical: 8,
flexDirection: 'row'
}}>
<Button title="Lower" onPress={() => { checkNum(num) }} />
<Button title="Greater" onPress={() => { checkNum(num) }} />
{
jsxVal === '' ? null : jsxVal
}
</View>
</View>
);
}
export default GameScreen;
【问题讨论】:
-
尝试用jsx语法(或null)初始化jsxVal变量,而不是空字符串。
-
为什么存储在变量中?您可以将 jsx 作为 checkNum 函数的返回,然后调用函数本身
-
@HelloWorld,我相信问题出在
{ jsxVal === '' ? jsxVal : null },当组件第一次渲染时返回空字符串,因此出现错误。但是您已经将问题编辑为正确的形式。成功了吗? -
@VigneshVPai 但 null 应该不是问题!
-
@HelloWorld 我为此添加了答案。
标签: javascript react-native jsx