繁体   English   中英

在功能组件中返回 React 元素

[英]Returning a React Element within a Functional Component

我对 React 相当陌生,并试图编辑前同事的代码(因此是非传统的 React 风格)。

单击单个按钮(“下拉菜单”)时,我需要返回一系列按钮(此处为“Hello”和“Goodbye”)。 为了使这更加动态,我想从 function (dropdownDetails)而不是 [show,setShow] 变量等返回这些按钮。

当我运行此代码时,控制台显示触发了 dropdownDetails,但 UI 中没有出现“Hello”和“Goodbye”。 我究竟做错了什么?

提前致谢!

///// In base.js:
const e = React.createElement;

///// in page_body.js:
function pageBody(props) {

    const dropdownDetailsWrap = (props) => (e) => {
      console.log("Wrap triggered")
      dropdownDetails()
    }
    
    function dropdownDetails() {
        console.log("dropdownDetails useEffect triggered")
        return( 
            e("button",{type:"button"},"Hello"),
            e("button",{type:"button"},"Goodbye")
             );
    };
    
    const pageBody = () => (e) => {
    return(
        e("button", {type:"button",onClick:dropdownDetailsWrap(),className:'btn'},"Dropdown")
        )}
    }

ReactDOM.render(e(pageBody), document.querySelector('#page_body'));

注意:我知道有更优雅的方法来制作下拉菜单,尤其是使用包。 现在只是试图理解纯 React 的基础知识。

如果您使用 react 的 useState 钩子,您可能可以这样做。

如果不使用 state,我怀疑我们能做到这一点。

我正在粘贴下面的代码,请在代码沙箱上查看以了解更多信息。

这是链接 链接

代码:

import React, { useState } from "react";
const e = React.createElement;

export default function App() {
  return (
    <div className="App">
      <PageBody />
    </div>
  );
}

function PageBody(props) {
  var buttonsToShow;
  const [showButtons, setshowButtons] = useState(false);
  const [buttons, setButtons] = useState([]);

  const dropdownDetailsWrap = (props) => {
    console.log("Wrap triggered");
    buttonsToShow = dropdownDetails();
    setButtons(buttonsToShow);
    setshowButtons(true);
  };

  function dropdownDetails() {
    console.log("dropdownDetails useEffect triggered");
    return [
      e("button", { type: "button", key: 1 }, "Hello"),
      e("button", { type: "button", key: 2 }, "Goodbye")
    ];
  }

  var dropbutton = () => {
    return e(
      "button",
      { type: "button", onClick: dropdownDetailsWrap, className: "btn" },
      "Dropdown"
    );
  };

  return (
    <div>
      {dropbutton()} <br /> {showButtons && buttons}
    </div>
  );
}

现在,我知道这不是最好的版本,但您仍然可以清理此代码并使用逻辑。 此外,通过使用 state,您的代码不会变成 static,而且您可以自定义更多的东西,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM