React学习第三天(ref绑定Dom对象、高阶组件、路由)

React学习第三天

1.ref绑定

与正常的js绑定元素并操作dom不同,在React中,需要通过ref绑定(不太建议这样操作的原因是因为可以通过Setstate进行数据操作)。

若需要操作,需要在类组件中Creat一个Ref,并在需要绑定的对象上设置声明好的名称即可

class Inp extends React.Component {
  constructor(props) {
    super(props)
    //此处声明该名称为ref
    this.refTest = React.createRef()
    this.state = {
      username: '',
      password: '',
    }
  }
  setUsername = (event) => {
    this.setState({
      username: event.target.value,
    })
  }
  setPassword = (event) => {
    this.setState({
      password: event.target.value,
    })
  }
  refClick = () => {
    this.refTest.current.focus()
  }
  render() {
    return (
      <div>
        <label>
          <span>用户名</span>
          <input
            value={this.state.username}
            onChange={this.setUsername}
            placeholder="请输入用户名"
            type="text"
          />
        </label>
        <label>
          <span>密码</span>
          <input
          //在需要绑定的元素上填写好声明的名称
            ref={this.refTest}
            value={this.state.password}
            onChange={this.setPassword}
            placeholder="请输入密码"
            type="password"
          />
        </label>
        <div>用户名:{this.state.username}</div>
        <div>密码:{this.state.password}</div>
        //一个简单的ref绑定测试
        <div onClick={this.refClick}>世界聚焦于你</div>
      </div>
    )
  }
}

2.高阶组件

声明一个函数A组件,里面存放好数据。此时再声明另一个函数B组件,用于返回显示A组件中的数据

function A(props) {
  return (
    <div>
      <h1>这是A组件</h1>
      <div>用户名:{props.user.username}</div>
      <div>详细信息:{props.user.msg}</div>
    </div>
  )
}
function GJ(Component) {
  let user = {
    username: 'Gelx',
    msg: '测试高阶组件',
  }
  return () => <Component user={user}></Component>
}

let HighA = GJ(A)

此时的A组件中的props只有GJ中的user值,无法实现其他的用法

3.路由

和Vue类似,但在React中需要另安装react-router-dom,安装好后引用即可在界面中实现路由,以及在实现动态路由时,实现方式为:(相关数据名称)

import { BrowserRouter as Router, Route, Link }from 'react-router-dom'

function DT(props) {
  let back = () => {
    props.history.push('/')
  }

  console.log(props)
  return (
    <div>
    //返回首页可以通过两种方式,第一:点击事件返回
      <button onClick={back}>返回首页</button>
      //第二:通过Link标签返回
      <Link to="/">返回首页</Link>
      <h1>这是{props.match.params.id}的界面</h1>
    </div>
  )
}

function App() {
  return (
    <div>
      <Router>
        <Route path="/router/:id" exact component={DT}></Route>
      </Router>
    </div>
  )
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值