如何在 JSX 中使用函数

IT技术 reactjs jsx
2021-05-18 08:19:52

我目前正在阅读 React 官方网站,在那里我遇到了这个问题。React 官网声明我们可以在 JSX 内部使用函数代码。因此,我尝试了以下代码,但它不起作用。

类 ABCD 扩展 React.Component {

render() {
    return (
        <div>
            <p>
                {() => <div>Hello World </div>}
            </p>
        </div>
    );
}

}

我知道,我知道,你们中的一些人可能会说看 React 网站上给出的例子。我看到了,官网给出的例子涉及到外部函数。我只是想知道我们可以独立使用 JSX 内部的函数。

有关更多信息,请参阅此链接:https : //reactjs.org/docs/jsx-in-depth.html

4个回答

因为我觉得你试图做的事情是错误的。

JSX 无法解析对象或函数

如果你只是尝试

render() {
    return (
        <div>
            <p>
                {() => <div>Hello World </div>}
            </p>
        </div>
    );
}

您正在尝试插入或返回一个不能作为表示节点函数它应该是可以被jsx 解析的东西一个对象或一个函数不能被 JSX 解析,它们应该被 Javascript 引擎解析。

您可以做的是定义您的方法并立即调用它,以便函数(iife 函数)返回一些可以被 JSX 解析的东西。

就像是

render() {
    return (
        <div>
            <p>
                {(() => {<div>Hello World </div>})()}
            </p>
        </div>
    );
}

希望你明白这一点。返回一些可以被 JSX 解析的东西。

只需调用一个返回 JSX 的函数。例如:

class FooComp extends React.Component {
    someFunction() {
        return (<div>Hello World!</div>);
    }

    render() {
        return (
            <div>
                    <p>
                        {this.someFunction()}
                    </p>
            </div>
        );
    }
}

您可以尝试将其称为立即调用的函数

render() {
    return (
        <div>
            <p>
                {(() => <div>Hello World </div>)()}
            </p>
        </div>
    );
}

除了其他答案中提到的立即调用的函数外,文档还提到还可以将函数用作子函数,该函数可以作为props.children(...args).

关键是组件最终必须返回一些可渲染的东西:

传递给自定义组件的子组件可以是任何东西,只要该组件在渲染之前将它们转换为 React 可以理解的东西。这种用法并不常见,但如果您想扩展 JSX 的功能,它就可以使用。