如何从另一个组件调用反应组件并传递所需的道具

How to call a react component from another component and pass required props

目前,我的 App.js 文件中有以下路线:

<Switch>
  <Route exact path="/new-job"
          render={(props) => <NewJob jobName={jobName} setMenuSelection={handleMenuSelection} />}
  />
  <Route exact path="/past-jobs"
          render={(props) => <PastJobs setMenuSelection={handleMenuSelection} />}
 />
</Switch>

现在在我的 PastJobs 组件中,我有以下带有 onClick 过程的按钮:

<Button
    onClick={() => {
      setConfirmDialog({
         isOpen: true,
         title: `Copy Job ${item.id}?`,
         onConfirm: () => { onCopy(item.job_info) }
      })
   }}         
>
Copy
</Button>

调用以下函数:

const onCopy = (job_info) => {
    setConfirmDialog({
        ...confirmDialog,
        isOpen: false
    })
    history.push({
        pathname: '/new-job',
        state: { detail: job_info }
    })
}       

在我的 <NewJob /> 组件中,我现在设置了以下内容,因为我认为我可以访问 state.detail 但不幸的是它是空的,即:

import { useLocation } from 'react-router-dom';

function NewJob( { jobName, setMenuSelection } ) {
    
       const { state } = useLocation();
    
       if (typeof state !== 'undefined') {
         const myVal = state.detail
         console.log("myVal", myVal )
       }
    
}

我遇到但不确定如何处理的问题是,在从按钮 onClick 调用的 onCopy 函数中,我如何调用路径为 exact path="/new-job"<NewJob /> 组件App.js 并传入道具 job_info ?

直接调用组件实际上是不存在的。但是你想要的可以通过不同的方式实现。

  1. 将状态机与事件总线(redux、redux-saga)结合使用
  2. 渲染道具https://reactjs.org/docs/render-props.html
  3. 通过道具(HOC)钻取的一堆回调
  4. 参考 https://reactjs.org/docs/refs-and-the-dom.html

我建议阅读更多关于它们的信息,以真正了解它是否符合您的用例。无论如何,这也是发展你的技能的好经历!