Eri*_*eon 1 javascript reactjs
我根据给定的变量呈现不同的文本,我只想
在 h2 标签内的特定变量处呈现。
我尝试使用正则表达式 \r 和 \n (以及组合)进行渲染,但没有用。
render() {
let {tracker} = this.props, headline;
switch(tracker){
case 1:
headline = 'That is amazing!'
break;
case 2:
headline = 'Too bad.<br />Try again'
break;
}
return(
<h2>{headline}</h2>
)
}
Run Code Online (Sandbox Code Playgroud)
似乎您想根据从父级传递的跟踪器值呈现不同的标题。
让我们看看下面的代码有什么问题。
render() {
let {tracker} = this.props, headline;
switch(tracker){
case 1:
headline = 'That is amazing!'
break;
case 2:
headline = 'Too bad.<br />Try again'
break;
}
return(
<h2>{headline}</h2>
)
}
Run Code Online (Sandbox Code Playgroud)
首先,声明this.props, headline似乎很不直观。
让我们把它分成两部分。
let headline;
let { tracker } = this.props;
Run Code Online (Sandbox Code Playgroud)
现在,switch检查条件并尝试分配标题值。
switch(tracker){
case 1:
headline = 'That is amazing!'
break;
case 2:
headline = 'Too bad.<br />Try again'
break;
}
Run Code Online (Sandbox Code Playgroud)
现在这是有问题的,因为当你 return 时<h2>{headline}</h2>,React 期望的是一个element。
有效表达式可以是字符串、数字或其他 JSX 元素。
情况 1 是可以的,因为它是一个字符串。
但是您在案例 2 中遇到问题的原因是因为<br />它是字符串的一部分,因此 React 将其视为字符串(并尝试对其进行解码)。
所以,我们能做些什么?
您可以通过去掉引号将 case 2 转换为一个元素,并将其包装到一个元素中。您可以使用任何元素,例如div, React.Fragmenet(<>/)。
switch(tracker){
case 1:
headline = 'That is amazing!'
break;
case 2:
headline = <>Too bad.<br />Try again</>
// or use "div" or other element.
// headline = <div>Too bad.<br />Try again</div>
break;
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是危险地渲染它。除非您知道自己在做什么,否则您永远不应该这样做。我不会更进一步,因为这可能不是你想要的。
您使用 switch 使用的代码是所谓的“命令式”代码。(您指定组件应该“如何”工作)。
但 React 本质上是声明性的,你告诉组件应该“做什么”。
所以让我们修复一下,让它像 React 一样。
render() {
// tracker is not changed, so declare it as `const`, which is a better practice.
const {tracker} = this.props
// You tell React what you want to do.
// When the tracker value is 1, show 'That's amazing!',
// When it's two, show the sympathy.
return(
<h2>
{tracker === 1 && 'That is amazing!}
{tracker === 2 && <>Too bad.<br />Try again</>}
</h2>
)
}
Run Code Online (Sandbox Code Playgroud)
上面的代码做同样的事情,但你基本上是告诉做什么,而不是它应该如何呈现。
或者你可以更进一步,但我想这足以作为小费。
| 归档时间: |
|
| 查看次数: |
3927 次 |
| 最近记录: |