在 props.children 中转义大括号

Escape Curly Brackets in props.children

我正在尝试使用以下 JSX 代码段传递要作为 this.props.children 处理的 Handlebars 模板:

<MyComponent>
  My address is {{address}}.
</MyComponent>

结果是Uncaught ReferenceError: address is not defined

解决方法是使用类似的东西:

<MyComponent>
  <span content="My address is {{address}}."></span>
</MyComponent>

然后使用this.props.children.props.content。这是我发现从根本上避免 {{address}} 被 JSX 解释为插值的唯一方法。

有没有直接的方法来转义 JSX 中的花括号?

尝试将组件内容包裹在花括号中:

<MyComponent>
  {"My address is {{address}}."}
</MyComponent>

大括号内的所有内容都是一个表达式,不会被解析为JSX。至少,它适用于 Babel REPL

试试这个:

<MyComponent>
  {'My address is {{address}}.'}
</MyComponent>

因为我还不能发表评论... ;) 当然,您不必转义整个文本 - 只需转义大括号即可。你在你的情况下做什么是个人喜好的问题。

<MyComponent>
 My address is {"{{"}address{"}}"}.
</MyComponent>

由于ES6中引入了Template Literals,我们这里可以直接使用,不用引入太多花括号。

render() {
     let address = 'Somewhere on this earth!';
     return (
        <MyComponent>
            {`My address is ${address}`}
        </MyComponent>    
     );
}

Link 到 JSFiddle

希望这对您有所帮助:)

我建议您使用新的 JavaScript 字符串文字。

这个:

{`{}`}

应该打印:

{}

因此,在您的情况下,将其全部设为字符串

{`My address is {{address}}.`}

应该打印:

My address is {{address}}.

和平! ✌️