两个组件(无父子关系)同享一个数据并且同步数据变化
// 状态提升 - 两个组件(非父子关系)同享一个数据并同步数据变化
class Info extends React.Component {
render() {
return (
<div>
<p>第{ this.props.inputNum }号</p>
<p>输入长度: { this.props.username.length }</p>
<p>提示:
{
this.props.username.length < 6
? '长度必须大于等于6'
: this.props.username.length >= 6 &&
(
this.props.username.length <= 12
? '长度合法'
: '长度必须小于12'
)
}
</p>
</div>
)
}
}
// function Info(props) {
// return (
// <div>
// <p>第{ props.inputNum }号</p>
// <p>输入长度: { props.username.length }</p>
// <p>提示:
// {
// props.username.length < 6
// ? '长度必须大于等于6'
// : props.username.length >= 6 &&
// (
// props.username.length <= 12
// ? '长度合法'
// : '长度必须小于12'
// )
// }
// </p>
// </div>
// )
// }
class UserNameInput extends React.Component {
render() {
return (
<div>
<Info username={ this.props.username } inputNum={ this.props.inputNum } />
<div>
<input type="text" value={ this.props.username } onChange={ (e) => this.props.handleUsernameChange(e) } />
</div>
</div>
)
}
}
// function UserNameInput(props) {
// const [ username, setUsername ] = React.useState('');
// // const handleUsernameChange = (e) => {
// // setUsername(e.target.value);
// // }
// return (
// <div>
// <Info username={ username } inputNum={ props.inputNum } />
// <div>
// {/* <input type="text" onChange={ (e) => handleUsernameChange(e) } /> */}
// <input type="text" onChange={ (e) => setUsername(e.target.value) } />
// </div>
// </div>
// )
// }
class App extends React.Component {
state = {
username: ''
}
handleUsernameChange(e) {
this.setState({
username: e.target.value
})
}
render() {
return (
<div>
<UserNameInput inputNum={ 1 } username={ this.state.username } handleUsernameChange={ this.handleUsernameChange.bind(this) } />
<UserNameInput inputNum={ 2 } username={ this.state.username } handleUsernameChange={ this.handleUsernameChange.bind(this) } />
</div>
)
}
}
ReactDOM.render(<App />, document.getElementById('app'));