大家好我有这个代码,我已经添加了一个表
import React, {Component} from 'react';
import Auth from '../modules/Auth';
import Dashboard from '../components/Dashboard.jsx';
import {
Table,
TableBody,
TableHeader,
TableHeaderColumn,
TableRow,
TableRowColumn,
} from 'material-ui/Table';
class DashboardPage extends React.Component {
/**
* Class constructor.
*/
constructor(props) {
super(props);
this.state = {
secretData: '',
selected: [1]
};
}
componentDidMount() {
const xhr = new XMLHttpRequest();
xhr.open('get', '/api/dashboard');
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
// set the authorization HTTP header
xhr.setRequestHeader('Authorization', `bearer ${Auth.getToken()}`);
xhr.responseType = 'json';
xhr.addEventListener('load', () => {
if (xhr.status === 200) {
this.setState({
secretData: xhr.response.message
});
}
});
xhr.send();
isSelected = (index) => {
return this.state.selected.indexOf(index) !== -1;
};
handleRowSelection = (selectedRows) => {
this.setState({
selected: selectedRows,
});
};
}
/**
我已经传递了这样的数据,这是正确的
*/
render() {
return (<Dashboard isSelected={this.isSelected} handleRowSelection={this.handleRowSelection} />);
}
}
export default DashboardPage;
这是另一个代码
import React, { PropTypes, Component } from 'react';
import { Card, CardTitle, CardText } from 'material-ui/Card';
import {Table,TableBody,TableHeader,TableHeaderColumn,TableRow,TableRowColumn,} from 'material-ui/Table';
const Dashboard = ({handleRowSelection, isSelected }) => (
<Table onRowSelection={this.handleRowSelection}>
<TableHeader>
<TableRow>
<TableHeaderColumn>ID</TableHeaderColumn>
<TableHeaderColumn>Name</TableHeaderColumn>
<TableHeaderColumn>Status</TableHeaderColumn>
</TableRow>
</TableHeader>
<TableBody>
<TableRow selected={this.isSelected(0)}>
<TableRowColumn>1</TableRowColumn>
<TableRowColumn>John Smith</TableRowColumn>
<TableRowColumn>Employed</TableRowColumn>
</TableRow>
<TableRow selected={this.isSelected(1)}>
<TableRowColumn>2</TableRowColumn>
<TableRowColumn>Randal White</TableRowColumn>
<TableRowColumn>Unemployed</TableRowColumn>
</TableRow>
<TableRow selected={this.isSelected(2)}>
<TableRowColumn>3</TableRowColumn>
<TableRowColumn>Stephanie Sanders</TableRowColumn>
<TableRowColumn>Employed</TableRowColumn>
</TableRow>
<TableRow selected={this.isSelected(3)}>
<TableRowColumn>4</TableRowColumn>
<TableRowColumn>Steve Brown</TableRowColumn>
<TableRowColumn>Employed</TableRowColumn>
</TableRow>
</TableBody>
</Table>
);
export default Dashboard;
我想要的是将函数isSelected,handleRowSelection传递给另一方但是我有那个问题告诉我未捕获的ReferenceError:isSelected未定义我想要的是应用此http://www.material-ui.com/#/components/table 是否有一种方法可以传递该功能
答案 0 :(得分:0)
的变化:
1- Dashboard是无状态功能组件,因此没有this
关键字。
2-你只是在解构一个参数并忽略所有其他参数,在这里:
const Dashboard = ({handleRowSelection }) => (.....)
isSelected
组件中未定义<{3> {3}}。
<强>解决方案:强>
1 - 避免破坏,并按照以下方式编写:
DashboardPage
并替换:
const Dashboard = (props) => (
)
2 - 或者构建其他道具值:
this.handleRowSelection` by `props.handleRowSelection
this.isSelected[0]` by `props.isSelected[0]
并const Dashboard = ({handleRowSelection, isSelected }) => (....)
和handleRowSelection
直接使用它们。
答案 1 :(得分:0)
首先,在DashboardPage
中,您需要将isSelected
和handleRowSelection
定义为方法(或者类属性)。
其次,您需要在this.
组件中的任何位置删除Dashboard
。
第三,您需要使用isSelected
中的Dashboard
回调,例如:() => isSelected(0)
。这将确保在您实际选择表行后调用isSelected
。目前,在isSelected
组件安装后,Dashboard
将被调用4次,因为该函数是直接调用的。