簡體   English   中英

如何在 JSX 中使用函數

[英]How to use function inside JSX

我目前正在閱讀 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

因為我覺得你試圖做的事情是錯誤的。

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) ,可以作為props.children(...args)調用。

關鍵是組件最終必須返回一些可渲染的東西:

傳遞給自定義組件的子組件可以是任何東西,只要該組件在渲染之前將它們轉換為 React 可以理解的東西。 這種用法並不常見,但如果您想擴展 JSX 的功能,它就可以使用。

盡管從您的問題中不清楚您是想在 jsx 中定義一個函數還是想從 jsx 調用函數。 如果你想在 jsx 中定義你的函數,那么你應該使用:

class ABCD extends React.Component {
   render() {
      return (
         <div>
             <p>
                 {(() => {<div>Hello World </div>})()}
             </p>
         </div>
      );
   }
}

如果你想從你的 jsx 調用一個函數,那么你應該使用:

class ABCD extends React.Component {
   show() {
        return (<div>Hello World!</div>);
   }
   render() {
        return (
            <div>
                    <p>
                        {this.show()}
                    </p>
            </div>
        );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM