2017-12-18 20 views
1

React JSのMaterial-UIのDate Pickerコンポーネントを使用します。選択した日付をテーブルに表示したい。日付はオブジェクトで、テーブル行に表示しようとするとエラーが発生します。これを行う方法?日付ピッカーから日付を取得してテーブルに表示する方法は?マテリアルUI。 ReactJS

import React, { Component } from 'react'; 
import DatePicker from 'material-ui/DatePicker'; 
import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table'; 

export default class AddTaskDialog extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { controlledDate: {} }; 
    this.handleChangeDate = this.handleChangeDate.bind(this); 
    } 

    handleChangeDate = (event, date) => { 
    this.setState({ 
     controlledDate: date, 
    }); 
    }; 

    render() { 
    return (
     <div> 
     <DatePicker hintText="Date" value={this.state.controlledDate} onChange={this.handleChangeDate}/> 
     <Table> 
      <TableHeader> 
      <TableRow> 
       <TableHeaderColumn>Date</TableHeaderColumn> 
      </TableRow> 
      </TableHeader> 
      <TableBody> 
      <TableRow> 
       <TableRowColumn>{this.state.controlledDate}</TableRowColumn> 
      </TableRow> 
      </TableBody> 
     </Table> 
     </div> 
    ); 
    } 
} 

答えて

2

handleChangeDateハンドラに送信された日付は、タイプobjectです。 TableRowColumnの内部でレンダリングするには、日付文字列に変換する必要があります。

export default class AddTaskDialog extends Component { 
constructor(props) { 
super(props); 
this.state = { controlledDate: new Date() }; 
this.handleChangeDate = this.handleChangeDate.bind(this); 
} 

handleChangeDate = (event, date) => { 
    this.setState({ 
    controlledDate: date 
    }); 
}; 

// INSIDE RENDER 
<TableRowColumn>{this.state.controlledDate.toDateString()}</TableRowColumn> 

const date = new Date(); 
 

 
console.log(typeof date); 
 
    
 
console.log(date.toDateString());

まだ
+0

動作しているようですが、コンソールに「Warning:Failed prop type: 'DatePicker'、' expected'オブジェクトに 'string'型のprop' value'が正しくありません。 – Italik

+0

私はすでに不要です。 – Italik

+1

最新のスニペットをお試しください。 'DatePicker'がDateオブジェクトを期待しているように見えるため、レンダリングメソッドで直接日付文字列に変換します。 –

1

状態がTableRowにありません。

constructor(props) { 
     super(props); 
     this.state = { controlledDate: '' }; 
     this.handleChangeDate = this.handleChangeDate.bind(this); 
    } 

    ... 

    render() { 
     ... 

     <TableRow> 
      TableRowColumn>{this.state.controlledDate || New Date(Date.now())}</TableRowColumn> 
     </TableRow> 
    } 
+0

エラー。 "警告:失敗した小道具タイプ:' TableRowColumn'に供給された無効な小道具 '子ども '、ReactNodeが必要です。" – Italik

+0

なぜ最初にオブジェクトとして日付状態を宣言していますか?私はそれが文字列だと思いますか?また、日付があるかどうかをチェックし、何か他のものを表示する必要があります。私は私の答えを更新します。 – Rodius

1
{this.state.controlledDate} 

ない{this.controlledDate}

+3

これは質問に答えるかもしれませんが、あなたはいくつかの詳細を提供し、その答えを説明することを望んでいないかもしれません。現状では、この回答は低品質です。 –

関連する問題