ReactJS - 输入组件数据传递
ReactJS - Input Components data passing
我正在编写我的第一个组件,但我在数据绑定方面遇到了问题
我想要的是在我的 LoginView 中获取字段的值,以便我可以在 handleSubmit 中将它们进一步传递到一个向后端发出请求的函数中。
我以前写过这个没有组件的表单,但后来我决定通过将每个表单拆分为小组件来改进它。
问题是我不明白在LoginView和TextInput之间传递数据是如何工作的。
文本输入组件
import React, {PropTypes} from 'react'
import classNames from 'classnames/bind';
class TextInput extends React.Component {
static propTypes = {
name: PropTypes.string,
placeholder: PropTypes.string,
label: PropTypes.string,
type: PropTypes.string,
value: PropTypes.any
}
constructor(props) {
super(props)
this.state = {is_valid: true}
this.handleChange = this.handleChange.bind(this)
}
handleChange(event) {
console.log(event, this.props)
this.props.value = event.target.value
console.log(this.props)
}
render() {
var divClasses = classNames({
'form-group': true,
'has-danger': !this.state.is_valid
})
var inputClasses = classNames({
'form-control': true,
'form-control-danger': !this.state.is_valid
})
console.log(this.props.value)
return (
<div className={divClasses}>
<label htmlFor={this.props.name}>{this.props.label}</label>
<input type={this.props.type} className={inputClasses}
id={'id_'+ this.props.name}
placeholder={this.props.placeholder}
name={this.props.name}
value={this.props.value}
onChange={this.handleChange}
/>
</div>
)
}
}
export default TextInput
视图
import React from 'react'
import TextInput from 'components/TextInput'
import EmailInput from 'components/EmailInput'
import PasswordInput from 'components/PasswordInput'
export class LoginView extends React.Component {
constructor(props) {
super(props)
this.state = {
email: '',
password: '',
remember_me: false
}
}
handleSubmit = (e) => {
e.preventDefault()
}
handleChange = (e) => {
console.log(e.target.name, e.target.value)
var key = e.target.name
var value = e.target.value.trim()
var data = {}
data[key] = value
this.setState(data)
}
render() {
console.log(this.state)
return (
<div className='row'>
<div className='col-md-offset-4 col-md-4'>
<form role='form' className='form form-horizontal' onSubmit={this.handleSubmit} noValidate="novalidate">
<TextInput name='Email' label='Email' type='text' placeholder='Email' value={this.state.email} />
<PasswordInput value={this.state.password} onChange={this.handleChange.bind(this)}/>
<div className='checkbox'>
<label><input type='checkbox' name='remmeber_me' onChange={this.handleChange}/> Keep me logged in</label>
</div>
<div className='clearfix'>
<button className='btn btn-primary btn-lg btn-block' type='submit'>Login</button>
</div>
</form>
</div>
</div>
)
}
}
export default LoginView
当两个组件具有父子关系时,在它们之间传递数据要容易得多。对于亲子交流,只需传递道具即可。链接到 React 文档:https://facebook.github.io/react/tips/communicate-between-components.html
"在 React 中,所有者是设置其他组件道具的组件。更正式地说,如果在组件 Y 的 render() 方法中创建组件 X,则说 X 归 Y 所有。如前所述,组件不能改变其道具——它们始终与其所有者设置的一致。这种基本的不变性导致UI保证是一致的。
通常,最好有一个"父"组件来处理所有状态更改
有关所有权的更多信息,请访问:https://facebook.github.io/react/docs/multiple-components.html#ownership
相关文章:
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React-将jSON数据传递给子组件的子组件
- 如何在ReactJs中渲染子组件时重新加载子组件的数据
- 在reactjs组件中预加载数据
- 具有大型数据集的组件仅在 IE11/Edge 上运行缓慢
- 使用数据数组创建多个类似组件
- 如何正确处理依赖ViewChild和Angular 2中可观察到的数据的组件上的更改检测
- Angular2路由-将数据从父组件传递到子组件
- 编辑组件中的Vuejs数据
- 在多个react.js组件中呈现json数据
- 通过使用此组件,检索父类数据
- 如何创建一个组件,我可以设置在 Angular 2 中的属性中获取 URL 数据
- 如何使用Vue.js(使用Vueify)通过组件显示数据
- Vue.js从另一个组件获取数据
- Sencha Touch:如何在setData()之后刷新组件的数据
- 如何更新angular2中组件之间的事件数据
- 如何访问Vue.js中深度嵌套的子组件中的数据
- 将数据传回父组件的ReactJS组件无法工作
- 如何处理需要子组件状态的Meteor数据
- 根据location.hash传递的数据重新呈现ReactJS嵌套的子组件