2016-09-19 9 views
3

をレンダリングされません、私はカスタムコンポーネントでReduxのフォーム/不変(v6.0.5)を使用して、フォームに渡さinitialValuesのレンダリングに問題があります。ここではReduxの形式のinitialValuesに渡された値

// WRAPPER COMPONENT 
import React from 'react'; 
import {connect} from 'react-redux'; 

import DocumentsEditForm from './documentsEditForm'; 

import {documentsGetOneInfo} from './../../../modules/documents/actions/documents_get_one_info'; 
import {documentsPut} from './../../../modules/documents/actions/documents_put'; 


@connect((state) => { 
    return ({ 
    selectedDocument: state.getIn(['documents', 'selectedDocument']).toJS() 
    }); 
}) 
class DocumentsEdit extends React.Component { 

    static propTypes = { 
    dispatch: React.PropTypes.func, 
    isLoading: React.PropTypes.bool, 
    routing: React.PropTypes.object, 
    selectedDocument: React.PropTypes.object 
    }; 

    constructor(props) { 
    super(props); 
    this.handleSubmit = this.handleSubmit.bind(this); 
    } 

    componentWillMount() { 
    this.props.dispatch(adminDocumentsGetOneInfo(this.props.routing.locationBeforeTransitions.query.id)); 
    } 

    handleSubmit(data) { 
    this.props.dispatch(documentsPut(data)); 
    } 

    render() { 
    const initialValues = (this.props.selectedDocument.id) ? { 
     filename: this.props.selectedDocument.filename, 
     id: this.props.selectedDocument.id 
    } : {}; 

    return (
     <DocumentsEditForm 
     enableReinitialize 
     initialValues={initialValues} 
     onSubmitDocumentsEditForm={this.handleSubmit} 
     /> 
    ); 
    } 
} 

export default DocumentsEdit; 

フォームですコンポーネント自体:私はsubmでき

import React from 'react'; 
import {ControlLabel, FormControl, FormGroup, InputGroup} from 'react-bootstrap'; 

const InputTextRedux = (props) => { 
    const { 
    id, 
    disabled, 
    input, 
    type 
    } = props; 

    return (
    <div> 
     <FormGroup 
     name={input.name ? input.name : ''} 
     > 
     <ControlLabel> 
      {'Label'} 
     </ControlLabel> 
     <InputGroup> 
      <FormControl 
      disabled={disabled ? true : false} 
      id={id ? id : input.name} 
      onChange={(event) => { 
       input.onChange(event.target.value); 
      }} 
      type={type ? type : 'text'} 
      value={input.value ? input.value : ''} 
      /> 
      <FormControl.Feedback /> 
     </InputGroup> 
     </FormGroup> 
    </div> 
); 
}; 

InputTextRedux.propTypes = { 
    disabled: React.PropTypes.bool, 
    id: React.PropTypes.string, 
    input: React.PropTypes.object, 
    type: React.PropTypes.string, 
}; 

export default InputTextRedux; 

import React from 'react'; 
import {Field, reduxForm} from 'redux-form/immutable'; 
import {Button} from 'react-bootstrap'; 

import InputTextRedux from './../../shared/components/input_text_redux'; 
import InputSelectRedux from './../../shared/components/input_select_redux'; 

let DocumentsEditForm = (props) => { 
    const {error, handleSubmit, pristine} = props; 

    return (
    <form 
     onSubmit={handleSubmit(props.onSubmitDocumentsEditForm)} 
    > 
     <Field 
     component={InputTextRedux} 
     disabled 
     name="id" 
     type="text" 
     /> 
     <Field 
     component={InputTextRedux} 
     name="filename" 
     type="text" 
     /> 
     <Button 
     type="submit" 
     > 
     {'Save'} 
     </Button> 
    </form> 
); 
}; 

DocumentsEditForm.propTypes = { 
    error: React.PropTypes.object, 
    handleSubmit: React.PropTypes.func, 
    onSubmitDocumentsEditForm: React.PropTypes.func, 
    pristine: React.PropTypes.bool 
}; 


documentsEditForm = reduxForm({ 
    form: 'documentsEditForm' 
})(DocumentsEditForm); 

export default DocumentsEditForm; 

そして、ここでカスタムInputTextReduxコンポーネントですそれはフォームとhandleSubmitに渡された正しいinitialValuesを取得するが、私は表示された値を取得することはできません。

DevToolsによると、redux-form/INITIALIZEは正しいペイロードで呼び出され、state-> form-> documentsEditForm-> values/initialの状態も正しく更新されます。

私はまた、固定初期値を読み込み、api呼び出し遅延の問題を除外しようとしましたが、私は同じ結果を得ました。 "入力:{value: ''}"は、フィールド小道具では常に空の文字列です。

props { 
    .... 
    initialValues: { 
     __altered: false, 
     _root: { 
      entries: [ 
       [ 
        'id', 
        '123456' 
       ], 
       [ 
        'filename', 
        'test.txt' 
       ] 
      ] 
     }, 
     size: 2 
    }, 
    .... 
} 

私は「props.initialValues._root.entries [0]に直接フィールドの値を設定しよう:私は小道具内のフォームコンポーネントは次のように構造が見えるrecievesことに気づいた何

[1]それは動作します。

また、完全なフォームは、この値が上記のinitialValuesの値 "2"で正しく入力されるname = "size"のフィールドを持っていることに気付きました。フォームは、値のinitialValuesの間違った "レベル"を見ています。これをテストするために、フィールド "__altered"の名前を付けてみました。その値は正しくfalに設定されていましたse。

私は間違っていますか?どうもありがとう!

答えて

関連する問題