varHarrie / react-hero

💼 React toolkit.
http://varharrie.me/react-hero
MIT License
41 stars 5 forks source link

实在不明白 child 里面是div ,是如何把input onchange事件绑定到form里面来的 #3

Closed nearxu closed 5 years ago

nearxu commented 5 years ago

我自己的思路是input onChange事件做一个dispatch,通过reduce进行分发,可是这样就没有办法做到定制化,麻烦作者稍微讲讲思路,万分感谢。

varHarrie commented 5 years ago

我们平常使用受控组件的时候,是自己维护一个value状态和onChange事件:

class App extends React.Component {
  constructor (props) {
    super(props)

    // 状态
    this.state = {
      value: ''
    }
  }

  // 事件
  onChange = (e) => {
    this.setState({value: e.target.value})
  }

  render () {
    const { value } = this.state
    return (
      <input value={value} onChange={this.onChange}/>
    )
  }
}

而这里的实现方式是,valueonChange都由FormField去维护,因为input组件是作为children传入,我们这里可以通过React.cloneElement去修改childrenprops,即传入valueonChange,详细看这里

这里有一篇文章详细说明了实现思路。

nearxu commented 5 years ago

非常感谢,已经解决了,不过这个react.cloneElement 方法太隐蔽了