Reagieren bekommen Wert tief im inneren DOM

Ich bin nicht so vertraut mit reagieren, ich versuche, die folgende Abstraktion über sign in /Formulare etc.

Werfen Sie einen Blick auf diese:

    var SignUpForm = React.createClass({

    handleSubmit: function(e) {
        e.preventDefault();
        console.log(this.refs.iitu_id.getDOMNode().value.trim())

        //iitu_id = this.refs.iitu_id.getDOMNode().value.trim();
        //password = this.refs.password.getDOMNode().value.trim();

        var error = UserValidator.valid({iitu_id: iitu_id, password: password});
        if (error) {
            this.setState({"errors": error });
            //console.log(error);
        } else {
            //console.log(error);
        }

    },

    getInitialState: function() {
        return {
            'errors': {
                iitu_id: null, 
                password: null
            }
        };
    },

    render: function() {
        return (
            /*jshint ignore:start */
            <form className="form-horizontal" onSubmit={this.handleSubmit} >
                <FormGroup label="iitu id" error_msg={this.state.errors.iitu_id} fieldName="iitu_id" fieldType="text" />
                <FormGroup label="password" error_msg={this.state.errors.password} fieldName="password" fieldType="password" />
                <ButtonGroup text="Войти"/>
            </form>
            /*jshint ignore:end */
        );
    }
});

var FormGroup = React.createClass({

    render: function() {
        var formGroupCss = 'form-group';
        if (this.props.error_msg){
            formGroupCss = 'form-group has-error';
        }

        return (
            /*jshint ignore:start */
            <div className={formGroupCss}>
                <Label fieldName={this.props.fieldName}>{this.props.label}</Label>
                <InputField type={this.props.fieldType}>{this.props.label}</InputField>
                <label className="control-label" for="inputError1">{this.props.error_msg}</label>
            </div>
            /*jshint ignore:end */
        );
    }
});



var ButtonGroup = React.createClass({
    render: function () {
        return (
            /*jshint ignore:start */
            <div className="form-group">
                <div className="col-sm-offset-2 col-sm-10">
                    <button className="btn btn-default">{this.props.text}</button>
                </div>
            </div>
            /*jshint ignore:end */
        );
    }
});

var InputField = React.createClass({
    render: function() {

        return (
            /*jshint ignore:start */
            <div className="col-sm-5">
                <input className="form-control" type={this.props.fieldType} placeholder={this.props.children}/>
            </div>
            /*jshint ignore:end */
        );
    }
});

exports.SignUpForm = SignUpForm;

es ist ein bisschen viel code, aber ich denke, es ist ziemlich leicht zu Lesen. Die Frage ist, wie bekomme ich den Wert meiner InputField Klasse, wenn ich drücken Sie die Schaltfläche "senden" (einfach nur Formular-Wert)? Es ist das problem, dass mein input-tag tief im inneren DOM. Weitere Frage, ist es gut zu haben, den folgenden code ein Entwurf, den ich meine, beschreiben jede logische Komponente, die als neue 'Klasse' ?

  • Sie können den Zugriff auf dom-Knoten mit ref-nur innerhalb des angegebenen Komponente. Sie versuchen, es zu benutzen, gehen Sie durch einige Stufen des Kinder-Komponenten. Sie können versuchen, pass ref - Eigenschaft für jedes Kind ein Beispiel in dieser Frage oder auf die Modell-Schicht aus dem gewünschten Rahmen ( Backbone-oder Flussmittel zum Beispiel ). Ich würde versuchen, kombinieren einige Komponenten haben nur 1 level von Kind-Komponenten und vermeiden Sie die Weitergabe der Daten durch das Modell.
InformationsquelleAutor Slow Harry | 2015-02-03
Schreibe einen Kommentar