1.父传子
首先在父组件中将要传递的数据动态绑定到子组件的标签上
import React from 'react';import ReactDOM from 'react-dom';import './index.css';// import App from '@/App';import * as serviceWorker from './serviceWorker';import Movies from "./components/movies"let user={name:"张三",age:18}ReactDOM.render(//这里就是将user绑定到<Movies {...user}></Movies>,document.getElementById('root'));serviceWorker.unregister();
在子组件中需要定义props的类型才可以使用
import React from 'react';//定义类型,Readonly表示只读type IProps=Readonly<{name:string,age:number;}>//这里的React.Component<p,s>,p这里的范型表示对props进行约定,s对state进行约定class movies extends React.Component<IProps> {render() {return (<div>{this.props.name}{this.props.age}</div>);}}export default movies;
2.子传父

1.在父组件中申明一个方法接受子组件传递过来的数据
//因为是ts,所以这里传过来的数据类型需要进行定义const fromChid = (obj:{user:string,content:string}) => {console.log("接收到子组件传递过来的数据",obj);};
2.在父组件使用子组件时将该函数传递给子组件
import React, { FC, useState } from "react";import Cmittem from "@/components1/cmittem";import CmtBox from "./CmtBox";const Cmtlist: FC<{}> = (props) => {const fromChid = (obj:{user:string,content:string}) => {console.log("接收到子组件传递过来的数据",obj);};return (<div><CmtBox func={fromChid}></CmtBox></div>);};export default Cmtlist;
3.在子组件的点击事件中触发父组件传递过来的方法
这里使用ts,因此需要定义传递过来的函数类型,以及函数内的参数类型
import React, { FC, useState } from "react";type IProps={func:(obj:{user:string,content:string})=>void}const CmtBox: FC<IProps> = (props) => {const [name, setName] = useState("");const [content, setContent] = useState("");const changeHandler = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {if (e.target.id === "name") {setName(e.target.value);} else {setContent(e.target.value);}};//在子组件中点击事件触发父组件传递过来的方法const postComment=()=>{//这里入参两个文本框输入的值props.func({user:name,content})}return (<div><div className="boxItem"><label htmlFor="name">请输入用户名</label><input type="text" id="name" value={name} onChange={changeHandler} /></div><div className="textAreaItem"><label htmlFor="content">请输入评论内容</label><textarea id="content" value={content} onChange={changeHandler} /></div><input type="button" value="发表评论" onClick={postComment}/></div>);};export default CmtBox;
