繁体   English   中英

如何在无响应的情况下将数据从无状态子组件发送到无状态父组件?

[英]How to send data from stateless child component to stateless parent component in react?

我是新来的。 我有一个带有几个类组件和无类组件的React App。 我有以下两个组件,需要从子组件向父组件发送数据(在这种情况下为“ projectID”)。 我的子组件是无类组件。 我知道我可以在类组件中执行以下操作

sendId(id) {
  this.setState({ projectID:id }, () =>
     this.props.onClick(this.state.projectID)
  )
}

但是我有一个无类的子组件

子组件:

const sendId = (id) => {
  // How to setup "send id to parent" here?
}

const project = ({ task }) => (
  <div onClick={() => sendId(task.projectID)} >
    {task.projectID}
  </div>
)

export default project

父组件:

import project from './project'

class ProjectList extends React.Component {

  render() {
    return (
      <div>
        {() => (
          <project 
              // How to setup "get id from child" here? 
          />
        )}
      </div>
    ));
  }
}

我怎样才能做到这一点?

如果我理解您的问题,可以通过将回调道具传递给ProjectList渲染方法中的<project>来从ProjectList组件访问传递给sendId()idsendId()

class ProjectList extends React.Component {

  render() {
    return (
      <div>
          {/* pass onSendId callback prop, and console log when it's invoked */}
          <project onSendId={ (theId) => { console.log(`sent id: ${theId}`); } } />
      </div>
    ));
  }
}

然后,此更改将要求您更新project组件,以便在调用onClick处理程序时调用回调prop:

const project = ({ task, onSendId }) => (
  {/* Pass the onSendId callback into project, and call this from onClick */}
  <div onClick={() => onSendId(task.projectID)} >
    {task.projectID}
  </div>
)

希望有帮助!

您可以将在父组件中定义的回调传递给孩子

组件道具。

子组件:

const project = ({ task, sendId }) => (
  <div onClick={() => sendId(task.projectID)} >
    {task.projectID}
  </div>
)

export default project

父组件:

import project from './project'

class ProjectList extends React.Component {

  sendIdHandler = (projectId) => {
    //put your logic here
  }

  render() {
    return (
      <div>
          <project sendId={this.sendIdHandler} />
      </div>
    ));
  }
}

只需将父级的方法提供给子组件,然后使用props.xxx()

https://jsfiddle.net/bugqsfwj/

您要做的就是将一个函数传递给接受ID的子组件。

父组件

class ProjectList extends React.Component {
  getChildData = (id) => {/* do something */ }

  render() {
    return (
      <div><Project getDataFn={this.getChildData}</div>
    ));
  }
}

子组件

const project = ({ task }) => (
  <div onClick={this.props.getDataFn(task.projectID)} >
    {task.projectID}
  </div>
)

快乐的反应:)

暂无
暂无

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

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