• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
ellaha
博客园    首页    新随笔    联系   管理    订阅  订阅
高阶函数和函数柯里化处理React中受控组件state传值

一,高阶函数

<body>
  <div id="example"></div>
  <script type="text/babel">
    class Demo extends React.Component{
      state = {
          userName: '',
          password: ''
        }

      render(){

        return (
          <form onSubmit={this.handleLogin}>
            // 将函数handleInfo的返回值作为onChange的回调
            姓名<input type="text" onChange={this.handleInfo('userName')} />
            密码<input type="password" onChange={this.handleInfo('password')} />
            <button>提交</button>
          </form>
        )
      }
      handleLogin = (event)=>{
        event.preventDefault()
        const {userName, password} = this.state
        console.log(userName, password)
      }
    // 高阶函数 handleInfo
= (type)=>{ return (event)=>{ console.log(this) console.log(event.target) this.setState({[type]: event.target.value}) } } } ReactDOM.render(<Demo />, document.getElementById('example')) </script> </body>

二,函数柯里化

https://juejin.cn/post/6844903959757324296

三,不用高阶函数实现受控组件state传值

<body>
  <div id="example"></div>
  <script type="text/babel">
    class Demo extends React.Component{
      state = {
          userName: '',
          password: ''
        }

      render(){

        return (
          <form onSubmit={this.handleLogin}>
            姓名<input type="text" onChange={event => this.handleInfo(event, 'userName')} />
            密码<input type="password" onChange={event => this.handleInfo(event, 'password')} />
            <button>提交</button>
          </form>
        )
      }
      handleLogin = (event)=>{
        event.preventDefault()
        const {userName, password} = this.state
        console.log(userName, password)
      }

      handleInfo = (event, type)=> {
        this.setState({[type]: event.target.value})
      }
    }
    ReactDOM.render(<Demo />, document.getElementById('example'))
  </script>
</body>

 

posted on 2022-01-17 14:27  ellaha  阅读(74)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3