2017-04-13 18 views
0

我不能在終極版型材料的UI作爲控制單元使用的DatePicker。 我打算在一開始就生成今天的日期。這裏是我的代碼:終極版型材料的UI控制的DatePicker

import React from 'react'; 
import { Field, reduxForm } from 'redux-form'; 
import { DatePicker } from 'redux-form-material-ui'; 

class PeriodForm extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      startDate:new Date(), 
     } 
    this.handleStartDateChange = this.handleStartDateChange.bind(this); 
    } 

    handleStartDateChange = (event, date) => { 
     this.setState({ 
     startDate: date 
     }); 
    }; 

    render(){ 
    return(
      <div> 
        <form onSubmit={handleSubmit}> 
         <div className="field-line"> 
          <Field 
           name="startDate" 
           floatingLabelText="Start Date" 
           component={DatePicker} 
           format={null} 
           value={this.state.startDate} 
           autoOk={true} 
           DateTimeFormat={Intl.DateTimeFormat} 
           onChange={handleStartDateChange} 
          /> 
         </div> 
        </form> 
        </div> 
)}} 
export default reduxForm({ 
    form: 'PeriodForm', 
})(PeriodForm); 

從上面的代碼中,它總是什麼都不顯示的日期選擇器,它應該產生今天的日期。 而讓說,如果我有一個表包含日期的列表,然後我每次點擊的日期標籤時,它就會產生它的日期選擇值。是對的,如果我只是做「setState」到我的this.state.startDate?

回答

0

首先,如果你已經在使用Redux的形式爲您的表單狀態管理,你不應該使用本地狀態用於存儲你的表單值,因爲這已經被終極版形式的照顧。

,如果你想爲初始值提供給你的領域,你可以通過在mapStateToProps階段通過initialValues做到這一點。

而且,你不必明確設置你的Field一個valueonChange處理程序,因爲進口包裹DatePicker組件中已經有這個邏輯。

下面的代碼應該工作:

import React from 'react'; 
import { connect } from 'react-redux'; 
import { Field, reduxForm } from 'redux-form'; 
import { DatePicker } from 'redux-form-material-ui'; 

class PeriodForm extends React.Component { 
    render() { 
    const { handleSubmit } = this.props; 

    return (
     <div> 
     <form onSubmit={handleSubmit}> 
      <div className="field-line"> 
      <Field 
       name="startDate" 
       floatingLabelText="Start Date" 
       component={DatePicker} 
       format={null} 
       autoOk={true} 
       DateTimeFormat={Intl.DateTimeFormat} 
       /> 
      </div> 
     </form> 
     </div>); 
    } 
} 

const Form = reduxForm({ 
    form: 'PeriodForm', 
    enableReinitialize: true 
})(PeriodForm); 

export default connect(() => ({ 
    initialValues: { 
    startDate: new Date() 
    } 
}))(Form); 
+0

,如果我想改變日期選擇器的價值,讓我們說,如果我有一個包含日期和我點擊表格中我會產生價值日期選擇日期每一次的名單表。我怎麼處理? – ukiyakimura

+0

我認爲最簡單的方法是將所有東西都分成多個部分。一個組件將包含帶日期的表格,該表格定義了一個「onChange」處理程序,該處理程序在您的日期更改時觸發。您的PeriodForm現在也將接受外部日期支撐值;在表格組件中選擇的一個。將所有日期合併到一起的最後一件事是將選定日期傳遞到表單組件的容器組件。然後,您可以再次使用mapStateToProps將initialValues設置爲外部日期值。 – Dennis

+0

我已經這樣做了,我在PeriodForm中將prop表中包含選定日期的值傳遞給datepicker。我得到的問題是,道具改變了,但它沒有在datepicker中填充任何日期,它仍然是空白的。 @Dennis – ukiyakimura

-1
import DatePicker from 'material-ui/DatePicker'; 
import React from 'react'; 

const DatePickerExampleInline =() => (
    <div> 
    <DatePicker hintText="Portrait Inline Dialog" container="inline" /> 
    <DatePicker hintText="Landscape Inline Dialog" container="inline" mode="landscape" /> 
    </div> 
); 
export default DatePickerExampleInline; 

可以用戶 「材料-UI」,上述工作的例子。希望它能幫助你。

+0

我想我的整合與材料的UI終極版的形式。不只是使用material-ui組件。 @umishra – ukiyakimura

+0

[請檢查鏈接](https://gist.github.com/insin/bbf116e8ea10ef38447b)希望它會幫助你 – umishra

0

我已經解決我的問題。我重構的DatePicker組分如下:

MUIDatePicker.js

import React from 'react'; 
import { DatePicker } from 'redux-form-material-ui' 

const MUIDatePicker = props => (
    <DatePicker 
    {...props} 
    value={props.val} 
    /> 
) 

export default MUIDatePicker; 

然後我調用它 部件道具內部字段:

<Field 
    name="startDate" 
    floatingLabelText="Start Date" 
    component={MUIDatePicker} 
    format={null} 
    val={this.state.startDate} 
    autoOk={true} 
    onChange={handleStartDateChange} 
    DateTimeFormat={Intl.DateTimeFormat} 
/> 

似乎如果我通過直接的DatePicker部件道具內,它不會設置該值。

+0

我已經弄清楚什麼是錯的@Dennis – ukiyakimura

+0

雖然這工作,我認爲這是通常不鼓勵使用真爲您的數據的兩個來源,因爲這可能會導致不可預知的行爲。 – Dennis

+0

我想是這樣,你有什麼其他的想法來解決這個問題? @Dennis – ukiyakimura