1.父传子

首先在父组件中将要传递的数据动态绑定到子组件的标签上

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import './index.css';
  4. // import App from '@/App';
  5. import * as serviceWorker from './serviceWorker';
  6. import Movies from "./components/movies"
  7. let user={
  8. name:"张三",
  9. age:18
  10. }
  11. ReactDOM.render(
  12. //这里就是将user绑定到
  13. <Movies {...user}></Movies>,
  14. document.getElementById('root')
  15. );
  16. serviceWorker.unregister();

在子组件中需要定义props的类型才可以使用

  1. import React from 'react';
  2. //定义类型,Readonly表示只读
  3. type IProps=Readonly<{
  4. name:string,
  5. age:number;
  6. }>
  7. //这里的React.Component<p,s>,p这里的范型表示对props进行约定,s对state进行约定
  8. class movies extends React.Component<IProps> {
  9. render() {
  10. return (
  11. <div>
  12. {this.props.name}
  13. {this.props.age}
  14. </div>
  15. );
  16. }
  17. }
  18. export default movies;

2.子传父

image.png
1.在父组件中申明一个方法接受子组件传递过来的数据

  1. //因为是ts,所以这里传过来的数据类型需要进行定义
  2. const fromChid = (obj:{user:string,content:string}) => {
  3. console.log("接收到子组件传递过来的数据",obj);
  4. };

2.在父组件使用子组件时将该函数传递给子组件

  1. import React, { FC, useState } from "react";
  2. import Cmittem from "@/components1/cmittem";
  3. import CmtBox from "./CmtBox";
  4. const Cmtlist: FC<{}> = (props) => {
  5. const fromChid = (obj:{user:string,content:string}) => {
  6. console.log("接收到子组件传递过来的数据",obj);
  7. };
  8. return (
  9. <div>
  10. <CmtBox func={fromChid}></CmtBox>
  11. </div>
  12. );
  13. };
  14. export default Cmtlist;

3.在子组件的点击事件中触发父组件传递过来的方法
这里使用ts,因此需要定义传递过来的函数类型,以及函数内的参数类型

  1. import React, { FC, useState } from "react";
  2. type IProps={
  3. func:(obj:{user:string,content:string})=>void
  4. }
  5. const CmtBox: FC<IProps> = (props) => {
  6. const [name, setName] = useState("");
  7. const [content, setContent] = useState("");
  8. const changeHandler = (
  9. e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>
  10. ) => {
  11. if (e.target.id === "name") {
  12. setName(e.target.value);
  13. } else {
  14. setContent(e.target.value);
  15. }
  16. };
  17. //在子组件中点击事件触发父组件传递过来的方法
  18. const postComment=()=>{
  19. //这里入参两个文本框输入的值
  20. props.func({user:name,content})
  21. }
  22. return (
  23. <div>
  24. <div className="boxItem">
  25. <label htmlFor="name">请输入用户名</label>
  26. <input type="text" id="name" value={name} onChange={changeHandler} />
  27. </div>
  28. <div className="textAreaItem">
  29. <label htmlFor="content">请输入评论内容</label>
  30. <textarea id="content" value={content} onChange={changeHandler} />
  31. </div>
  32. <input type="button" value="发表评论" onClick={postComment}/>
  33. </div>
  34. );
  35. };
  36. export default CmtBox;