如何从自定义 React-Select MenuList 组件调用父组件方法(或状态提升)?

How to call a parent component method (or lift of state) from a custom React-Select MenuList component?

我在 React-Select 元素的底部创建了一个自定义 MenuList 按钮(“添加新用户”),以允许将另一个用户添加到 select 列表。但是,我无法弄清楚如何在创建新用户后处理该事件。下面的 codesandbox 包含一个简化版本。具体来说,第 29 行 this._loadData(randomId) 没有访问父组件的 this 的范围(很明显)。我的问题是,如何添加“handleEvent”属性 以便我可以将状态提升到此自定义 MenuList 组件的父组件?

允许用户添加新 AppUser 的自定义 MenuList 组件的代码片段:

const MenuButtonAddNewUser = (props) => {
  return (
    <components.MenuList {...props}>
      {props.children}
      <div className="border-top text-center py-2">
        <a
          href="showModalUrl.action"
          onClick={(event) => {
            event.preventDefault();

            // Simluate opening a modal and adding a user
            let randomId = Math.floor(Math.random() * (10 - 4 + 1)) + 4;
            console.log(
              "Simluate loading modal and adding a user with id: " + randomId
            );

            // Tell parent componenent to reload the options from the database
            // and auto-select the new user
            // How do I gain access to "_loadData"???
            //this._loadData(randomId);
            console.log(
              "User added. Call 'this.loadData(" + randomId + ")' here!!"
            );
          }}
        >
          <i className="fa fa-fw fa-user-plus mr-1" /> Add New Agent
        </a>
      </div>
    </components.MenuList>
  );
};

我不熟悉 react-select 的 API,但是您可以采用的一种方法是将 class 组件转换为函数组件。然后您可以将 MenuButtonAddNewUser 组件移动到 App 组件中,这将使其能够访问 App 可以访问的所有内容。

CodeSandbox link 建议:https://codesandbox.io/s/react-select-custom-event-handler-forked-n0v21o?file=/src/App-Hooks.js