2016-04-07 31 views
3

Bir kullanıcı bir form gönderdiğinde form değerlerini yakalamak istiyorum.Yanıt Gönderme/Yeniden Gönderme formunda gönder

var CommentForm = React.createClass({ 
    handleAuthorChange: function(e) { 
    this.setState({author: e.target.value}); 
    }, 
    handleTextChange: function(e) { 
    this.setState({text: e.target.value}); 
    }, 
    handleSubmit: function(e) { 
    e.preventDefault(); 
    var author = this.state.author.trim(); 
    var text = this.state.text.trim(); 
    if (!text || !author) { 
     return; 
    } 
    render: function() { 
    return (
     <form className="commentForm" onSubmit={this.handleSubmit}> 

Bu stil girişi başına bir taşıma fonksiyonu aracılığıyla duruma tüm değişiklikleri iter: öğretici gösterileri bu tepki. Eğer Redux'la dolu olsaydım, karışıma pek çok şey gibi görünen, harekata eylemler ve eylem yaratıcıları ekleyeceğime inanıyorum.

handleSubmit numaralı argümana yapılan bir olaydır.

Çalışmak çok daha kolay görünen aşağıdaki React/Redux başlangıç ​​kitine rastladım. Formun onSubmit işleyicisi için işleyici neden

Container

@connect(
() => ({}), 
    {initialize}) 
export default class Survey extends Component { 
    ... 

    handleSubmit = (data) => { 
    window.alert('Data submitted! ' + JSON.stringify(data)); 
    this.props.initialize('survey', {}); 
    } 

    render() 
    return (<SurveyForm onSubmit={this.handleSubmit}/>) 
    ... 

Presentational

class SurveyForm extends Component { 
    static propTypes = { 
    handleSubmit: PropTypes.func.isRequired, 
    } 

    render() { 
    const { handleSubmit } = this.props; 
    return (
     <div> 
     <form className="form-horizontal" onSubmit={handleSubmit}> 
    ... 
    } 
} 

Ne belirsiz olduğum: Akıllı bir/konteyner bileşeni ve dilsiz/sunumsal bileşen kombinasyonunu kullanır Facebook öğretici için argüman için bir olay alarak, ancak başlangıç ​​kitinin onSubmit işleyicisinin form verilerini neden aldığını ... Başlangıç ​​seti'den faydalanıyor 10 paket ancak doğrudan bu işleyicinin nasıl davranacağını nasıl etkilediğini görmüyorum.

cevap

4

Anahtar, SurveyForm sınıfında ES2016 decorator olarak kullanılmakta olan redux-form sınıfındadır.

... 
@reduxForm({ 
    form: 'survey', 
    fields: ['name', 'email', 'occupation', 'currentlyEmployed', 'sex'], 
    validate: surveyValidation, 
    asyncValidate, 
    asyncBlurFields: ['email'] 
}) 
export default 
class SurveyForm extends Component { 
... 

dekoratör bir kaydırma bileşeni dönen SurveyForm için bir ambalaj fonksiyonu olarak hareket edecektir.

Fark etmiş olabileceğiniz gibi, SurveyForm bileşeni, kapsayıcıya aktarılmayan bir handleSubmit desteğini kabul eder. Bunun nedeni, @reduxForm dekoratörünün sağlamasıdır. Olay daha sonra işlenir ve en üst düzey onSubmit desteğiyle kap işleyicisine yalnızca formData döndürülür.

Esasen, sarılmış bir SurveyForm bileşenini döndüren reduxForm olarak düşünebilirsiniz.

there koduna dalabilir, ancak uyarılırsınız, oldukça yoğun.

+0

Doğru olduğuna inanıyorum, çünkü 'handleSubmit' bir prop olarak aktarılmış gibi görünüyor: render() return () 'Başka bir şey mi demek istediniz? –

+0

Kodda, SurveyForm hiçbir zaman 'this.props.onSubmit' işlevini çağırmaz ancak' this.props.handleSubmit' işlevini çağırır. İşleyiciniz 'onSubmit' propine bağlanıyor, yani SurveyForm'la doğrudan hiçbir zaman çağrılmadığı anlamına geliyor. ReduxForm kodunda 'this.props.onSubmit' öğesini çağırarak görebilirsiniz. Bu oldukça zor, çünkü isimler oldukça benzer, ama özünde SurveyForm 'this.props.handleSubmit' (reduxForm tarafından sağlanan) 'i çağırır, bu da iadelerde' this.props.onSubmit' (işleyiciniz) olarak adlandırılır. – whitep4nther

İlgili konular