[英]How to access a function in a child class component from a stateless parent?
[英]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()
的id
, sendId()
:
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()
。
您要做的就是将一个函数传递给接受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.