Hem*_*mal 3 reactjs material-ui
任何帮助学习者表达赞赏的指针.
一个有2个输入的表单:
我正在尝试设置组件状态以存储文本字段的值和所选表行的数组,以便可以将状态传递给服务器onSubmit.
import React, { Component } from 'react';
import TextField from 'material-ui/TextField';
import RaisedButton from 'material-ui/RaisedButton';
import {Table, TableBody, TableFooter, TableHeader, TableHeaderColumn, TableRow, TableRowColumn} from 'material-ui/Table';
const tableData = [{
feedName: 'Flossing habit',
messageCount: '12 messages'
}, {
feedName: 'Post exo instructions',
messageCount: '5 messages'
}, {
feedName: 'Appointment feedback',
messageCount: '1 message'
}];
class NewPatient extends Component {
constructor (){
super();
this.state = ({
email: "",
feeds: []
});
this.setEmail = this.setEmail.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
this.onRowSelection = this.onRowSelection.bind(this);
}
setEmail(event) {
console.log(event.target.value);
this.setState({email: event.target.value})
}
handleSubmit(event){
event.preventDefault();
console.log(this.state);
//Meteor.call('console', this.state);
this.setState({email: ''});
}
onRowSelection(rows){
console.log(rows);
this.setState({feeds: rows})
}
render() {
let availableFeeds = tableData.map(feed=> {
return (
<TableRow key={feed.feedName}>
<TableRowColumn>{feed.feedName}</TableRowColumn>
<TableRowColumn>{feed.messageCount}</TableRowColumn>
</TableRow>
)});
return (
<form onSubmit={this.handleSubmit}>
<TextField
name='email'
value={this.state.email}
onChange={this.setEmail}
hintText='Patient email address'
/>
<Table multiSelectable={true} onRowSelection={this.onRowSelection}>
<TableHeader displaySelectAll={false}>
<TableRow>
<TableHeaderColumn>Feed Name</TableHeaderColumn>
<TableHeaderColumn>Number of messages</TableHeaderColumn>
</TableRow>
</TableHeader>
<TableBody>
{availableFeeds}
</TableBody>
</Table>
<RaisedButton type="Submit" label="Send" primary={true} />
</form>
)
}
}
;
export default NewPatient;
Run Code Online (Sandbox Code Playgroud)
设置所选行数组的组件状态.我用的时候:
onRowSelection(rows){
console.log(rows);
this.setState({feeds: rows})
}
Run Code Online (Sandbox Code Playgroud)
我怀疑,但不确定(如果这是问题,不知道如何使用它,在http://www.material-ui.com/#/components/table的文档中找不到任何内容),我需要在'onRowSelection'中添加一个函数来操作每行中的'selected'布尔值..?
有没有人有这方面的经验或看到我遗失的明显事物?
提前感谢任何已经读到这篇文章的人!任何建议/指向相关链接/文件非常感谢.
在使用Ryan在themeteorchef.com上找到解决方案后回答:
主要注意事项:
1. Material-UI表具有deselectOnClickaway属性 - 确保设置为false!
2.每当选择/取消选择任何其他行或者表格的另一部分(类似于Shouvik Roy的答案)时,我们需要找到一种为每行设置"选定"状态的方法.
import React, { Component } from 'react';
import TextField from 'material-ui/TextField';
import RaisedButton from 'material-ui/RaisedButton';
// import { _ } from 'meteor/underscore';
import {Table, TableBody, TableFooter, TableHeader, TableHeaderColumn, TableRow, TableRowColumn} from 'material-ui/Table';
const tableData = [{
feedName: 'Flossing habit',
messageCount: '12 messages',
selected: false,
}, {
feedName: 'Post exo instructions',
messageCount: '5 messages',
selected: false,
}, {
feedName: 'Appointment feedback',
messageCount: '1 message',
selected: false,
}];
class NewPatient extends Component {
constructor (){
super();
this.state = ({
email: "",
feeds: tableData
});
this.setEmail = this.setEmail.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
this.onRowSelection = this.onRowSelection.bind(this);
}
setEmail(event) {
console.log(event.target.value);
this.setState({email: event.target.value})
}
handleSubmit(event){
event.preventDefault();
console.log(this.state);
Meteor.call('console', this.state.email);
this.setState({email: ''});
}
onRowSelection(rows){
const selectedFeeds = [];
this.state.feeds.forEach((feed, i) => {
feed.selected = rows.indexOf(i) > -1;
selectedFeeds.push(feed);
});
// console.log(selectedFeeds);
this.setState({feeds: selectedFeeds}, () => {
console.log(this.state.feeds);
});
}
render() {
let availableFeeds = this.state.feeds.map((feed, i) => {
return (
<TableRow key={feed.feedName} selected={feed.selected}>
<TableRowColumn>{feed.feedName}</TableRowColumn>
<TableRowColumn>{feed.messageCount}</TableRowColumn>
</TableRow>
)});
return (
<form onSubmit={this.handleSubmit}>
<TextField
name='email'
value={this.state.email}
onChange={this.setEmail}
hintText='Patient email address'
/>
<Table multiSelectable={true} onRowSelection={this.onRowSelection}>
<TableHeader displaySelectAll={false}>
<TableRow>
<TableHeaderColumn>Feed Name</TableHeaderColumn>
<TableHeaderColumn>Number of messages</TableHeaderColumn>
</TableRow>
</TableHeader>
<TableBody deselectOnClickaway={false}>
{availableFeeds}
</TableBody>
</Table>
<RaisedButton type="Submit" label="Send" primary={true} />
</form>
)
}
}
;
export default NewPatient;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6023 次 |
| 最近记录: |