通过设置input元素的value值(或复选框的checked值)实现Getter,通过监听onChange事件实现Setter,从而实现数据双向绑定。
- class element extends React.Component {
- state = {
- txt:"",
- checked:false
- }
- handleTxt = (e) => {
- this.setState({txt : e.target.value})
- }
- handleChecked = e => {
- this.setState({checked : e.target.checked})
- }
- render(){
- return (
-
-
- )
- }
- }
多表单的优化操作:
1)给input元素加name,name=state中对应的数据名、2)统一用一个处理函数处理数据变化,函数内用e.target.name获取应该修改的状态名
- class element extends React.Component {
- state = {
- txt:"",
- checked:false
- }
- handleForm = (e) => {
- let name = e.target.name
- let value = e.target.value||e.target.checked
- this.setState({[name] : value}) //!!这里要用[],否则会当作"name"字符串处理
- }
- render(){
- return (
-
-
- )
- }
- }
- import React from 'react'
- import ReactDom from 'react-dom'
-
- //函数式:porps形参
- function Element1 (props){
- return (
- <p>{props.name}+{props.age}p>
- )
- }
-
- //类式:this.props
- class Element2 extends React.Component{
- render(){
- return (
- <p>{this.props.name}+{this.props.age}p>
- )
- }
- }
-
- ReactDom.render(<Element1 name='bob' age={18}/>)
- ReactDom.render(<Element2 name='bob' age={18}/>)
注:1)props可以传递任意数据类型,包括数组、对象、函数、dom结构等。2)props只读。3)在类中如果定义了constructor(props)则必须将props传入做形参,且需要在super(props)函数也传入props形参
组件间通信方式:
1)父传子:props传数据,如上
2)子传父:props传函数,通过回调函数传参方式
3)兄弟组件通信:状态提升,将共享状态的定义提升到公共父组件
假设 祖先 > subComponent > 后代
1)创建两个内置组件Provider、Comsumer
const {Provider,Consumer} = React.createContext()
2)祖先元素中用Provider包裹返回值
- //祖先
- render(){
- return (
-
-
-
- )
- }
3)后代元素用Consumer {}包裹
- render(){
- return(
-
-
{ data => 名字是:{data}
}
-
- )
- }
三、props深入
1、props的children属性
当渲染组件时,组件中嵌套的内容视为children属性,可以通过props.children访问到。
嵌套的内容可以是文本、标签、组件、jsx语句、函数等
- const App = (props)=>{
- props.children() //函数执行
- return (
- <div>{props.children}div>
- )
- }
-
- // ReactDom.render(
这是一段文本 ) - // ReactDom.render(
这是一个p标签
) - // ReactDom.render(
这是一个子组件 ) - // ReactDom.render(
{()=>console.log("这是一个函数")} )
2、props校验,需要安装 prop-types包
常用的校验规则:
3、props默认值
-
相关阅读:
day30-JQuery03
Spring Authorization Server 实现授权中心
如何用Python获取网页指定内容
数据结构与算法-选择&冒泡&快排&计数
十二、流程控制-循环
python让女友照片飞来飞去
不用定时器,实现鼠标长悬浮和鼠标长按监听
Day17_10 JavaWeb基础之IDEA、JavaWeb项目部署
基于自适应扰动的疯狂蝴蝶算法-附代码
自动化横行的今天,手工测试如何杀出一条血路?
-
原文地址:https://blog.csdn.net/qq_36582776/article/details/127866755