Tôi có hai thành phần: một thành phần vùng chứa và một thành phần trình bày.Đọc <input> trong thành phần chức năng (không quốc tịch)
Vùng chứa tìm nạp tất cả thông tin và hành động cần thiết để hiển thị Bài đăng bằng cách sử dụng thành phần thuyết trình. Trên thành phần thuyết trình tôi có một cách để tôi có thể chuyển đổi giữa việc trình bày thông tin và chỉnh sửa nó. Khi tôi chỉnh sửa và gửi dữ liệu về bài đăng, tôi muốn đọc các giá trị từ tất cả các yếu tố đầu vào khác nhau mà tôi có để tôi có thể gửi một hành động.
Tuy nhiên, các yếu tố đầu vào là không phải bên trong thẻ <form id='theForm' onSubmit={onHandleSubmit}>
. Thay vào đó, tất cả các số <input>
và <button type='submit'>
nằm ngoài số <form>
có thuộc tính form='theForm'
.
Tôi nghĩ rằng tôi có thể có nhiều <input>
ngoài hình thức, nhưng miễn là thuộc tính form
chỉ về phía <form>
tương ứng, tôi có thể đọc nó giá trị sử dụng trường hợp handleOnSubmit (e) {...}
nhận được. Tuy nhiên, tôi đã không tìm ra cách để làm điều đó.
Làm cách nào để đọc giá trị của các yếu tố đầu vào trên chức năng handleOnSubmit
? Hoặc đây là một ý tưởng hoàn toàn sai lầm tôi nên từ bỏ?
// PostSummaryContainer.js
import React, { PropTypes, Component } from 'react'
import { connect } from 'react-redux'
import { loadPost, editPost, editPostCancel, editPostSubmit } from '../../actions/posts'
import PostSummaryView from '../../views/details/summary'
class PostSummaryContainer extends Component {
constructor (props) {
super(props)
this.handleOnSubmit = this.handleOnSubmit.bind(this)
this.handleOnCancel = this.handleOnCancel.bind(this)
this.handleOnSubmit = this.handleOnSubmit.bind(this)
}
handleOnEdit (e) {
e.preventDefault()
this.props.editPost()
}
handleOnCancel (e) {
e.preventDefault()
this.props.editPostCancel()
}
handleOnSubmit (e) {
e.preventDefault()
// How do I read the input values? <--------------------
}
componentWillMount() {
const {
id,
loadPost
} = this.props
loadPost(id)
}
render() {
const {
post,
isLoading,
isEditing
} = this.props
const viewProps = {
bacon,
isLoading,
isEditing,
handleOnEdit: this.handleOnEdit,
handleOnCancel: this.handleOnCancel,
handleOnSubmit: this.handleOnSubmit
}
return (
<PostSummaryView {...viewProps} />
)
}
}
const mapStateToProps = (state, ownProps) => {
const {
params: {
id
}
} = ownProps
const post = state.entities.post[id]
const {
isLoading,
isEditing
} = state.posts
return {
id,
post,
isLoading,
isEditing
}
}
export default connect(
mapStateToProps,
{ loadPost, editPost, editPostCancel, editPostSubmit }
)(PostSummaryContainer)
Mở phần trình bày của tôi:
// PostSummmaryView.js
import React from 'react'
import moment from 'moment'
function PostSummaryView (props) {
const {
post,
isLoading,
isEditing,
handleOnEdit,
handleOnCancel,
handleOnSubmit
} = props
const formId = 'editPostForm'
return (
isLoading
? <div>Loading...</div>
: <div className='row'>
{isEditing && <form id={formId} onSubmit={handleOnSubmit}><input type='text' name='name' /></form>}
<div className='col-md-6'>
<img src={post.media.url} className='img-responsive' />
{isEditing && <input type='file' name='media' form={formId}/>}
</div>
<div className='col-md-6'>
<h1>{post.name}</h1>
<p>
{moment(post.publicationDate).format('dddd, MMMM Do')}
</p>
<hr />
<p className='text-left'>
{post.description || 'Lorem ipsum dolor sit amet, consectetur adipisici elit...'}
</p>
{isEditing
? <div>
<button className='btn btn-lg btn-default' onClick={handleOnCancel}>Cancel</button>
<button type='submit' className='btn btn-lg btn-default' form={formId}>Submit</button>
</div>
: <button className='btn btn-lg btn-default' onClick={handleOnEdit}>Edit</button>
}
</div>
</div>
)
}
export default PostSummaryView
Ah. Điều này có vẻ như là một ý tưởng tốt để thử. Ngày mai tôi sẽ kiểm tra nó và báo cáo lại với nó như thế nào. Cảm ơn! – Sparragus
Tôi đã thử triển khai thực hiện điều này hoặc sử dụng biểu mẫu redux. Tôi đã có một thời gian khó khăn với tài liệu của redux-form nên tôi đã từ bỏ nó. Và tôi sẽ khám phá ý tưởng của bạn cho một dự án tương lai. Cuối cùng tôi đã kết thúc refactoring mã của tôi từ các thành phần chức năng để lớp X mở rộng thành phần và đọc các đầu vào trở thành và nhiệm vụ dễ dàng hơn. Tôi cũng đã loại bỏ các
Tuyệt vời, có vẻ như một trải nghiệm học tập tốt - bất kỳ cơ hội nào bạn có thể cập nhật câu hỏi của mình với giải pháp được cấu trúc lại? – rkd