[英]Stateless React components with controlled input
目前,为了使受控输入在Stateless React组件中工作,我将无状态组件包装在Sate完整组件中。
例如,
const InputComponent = (props) => {
return (
<input value={props.name} onChange={props.handleChange} />
);
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
name: 'Tekeste'
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({
name: event.target.value
});
}
render() {
return (
<InputComponent name={this.state.name} handleChange={this.handleChange} />
);
}
}
我想知道的是一些事情。
由于InputComponent
接收其值以及从其父级修改它的回调,因此它是没有状态的受控输入。 这是一个非常好的模式,你也可以使用这样的ES7类属性使它更简单:
class App extends React.Component {
state = {
name: 'Tekeste'
};
handleChange = (event) => {
this.setState({
name: event.target.value
});
}
render() {
return (
<InputComponent name={this.state.name} handleChange={this.handleChange} />
);
}
}
如果你正在使用create-react-app
,它已经开箱即用了。
此外,您可以将受控输入的道具重命名为value
和onChange
因为它们更常规使用。
建立@ frontsideair的答案,你可以使用https://github.com/NullVoxPopuli/react-state-helpers做以下的事情
import React, { Component } from 'react';
import stateWrapper from 'react-state-helpers';
class App extends Component {
render() {
const {
mut,
values: { name }
} = this.props;
return <InputComponent name={name} handleChange={mut('name')} />;
}
}
export default stateWrapper(App)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.