Datatables 编辑React+;重演
我在react项目中有一个material UI表,我希望用户单击铅笔/编辑图标来编辑表行 这是一个加载的问题,但这是否需要一个额外的材料UI?让这一切发生的逻辑是什么??我在后端设置了大部分代码,但不知道如何在组件中编写这些代码 谢谢你的关注Datatables 编辑React+;重演,datatables,react-redux,material-ui,Datatables,React Redux,Material Ui,我在react项目中有一个material UI表,我希望用户单击铅笔/编辑图标来编辑表行 这是一个加载的问题,但这是否需要一个额外的材料UI?让这一切发生的逻辑是什么??我在后端设置了大部分代码,但不知道如何在组件中编写这些代码 谢谢你的关注 //STYLE VARIABLE BOR MATERIAL BUTTON const style = { margin: 12 // }; const mapStateToProps = (state) => ({
//STYLE VARIABLE BOR MATERIAL BUTTON
const style = {
margin: 12
//
};
const mapStateToProps = (state) => ({
user: state.user,
reduxState: state.getExpense
});
class ExpenseTable extends Component {
constructor(props) {
super(props);
this.state = {
getExpense: []
};
}
isSelected = (index) => {
return this.state.selected.indexOf(index) !== -1;
};
handleRowSelection = (selectedRows) => {
this.setState({
selected: selectedRows,
});
};
//on page load, DISPATCH GET_EXPENSE is
//SENT TO expenseSaga which then
//goes to getExpenseReducer and appends EXPENSE_DATA to the
//DOM
componentDidMount() {
const { id } = this.props.match.params;
this.props.dispatch({ type: USER_ACTIONS.FETCH_USER });
this.props.dispatch({ type: 'GET_EXPENSE' });
}
componentDidUpdate() {
if (!this.props.user.isLoading && this.props.user.userName ===
null) {
this.props.history.push('home');
}
}
logout = () => {
this.props.dispatch(triggerLogout());
// this.props.history.push('home');
};
//SETS STATE FOR ALL INPUTS
handleChange = (name) => {
return (event) => {
this.setState({
[name]: event.target.value
});
};
};
//SUBMIT BUTTON- TRIGGERS DISPATCH TO EXPENSE SAGA TO ADD DATA
handleClick = () => {
console.log('add expense', this.state);
this.props.dispatch({
type: 'ADD_EXPENSE',
payload: this.state
});
};
//TRASH ICON-TRIGGERS DISPATCH TO EXPENSE SAGA DELETE
handleClickRemove = (id) => {
console.log('delete expense', this.state);
this.props.dispatch({
type: 'DELETE_EXPENSE',
payload: id
});
};
handleClickEdit = (row) => {
console.log('edit expense', this.state)
this.props.dispatch({
type: 'EDIT_EXPENSE',
payload: row
})
}
render() {
console.log('HEY-oooo expense render', this.state);
let content = null;
if (this.props.user.userName) {
//MAP OVER REDUX STATE.
const tableRows = this.props.reduxState.map((row) => {
//.MAP SEPARATES DATA INTO INDIVIDUAL ITEMS.
const { id, item_description, purchase_date,
item_price, item_link } = row;
return (
<TableRow selectable={false}>
{/* TABLE ROWS */}
<TableRowColumn>{item_description}
</TableRowColumn>
<TableRowColumn>{purchase_date}
</TableRowColumn>
<TableRowColumn>${item_price}</TableRowColumn>
<TableRowColumn><a href={item_link}>{item_link}
</a></TableRowColumn>
<TableRowColumn><EditIcon class="grow:hover"
onClick={() => {this.handleClickEdit(row)}} />
</TableRowColumn>
<TableRowColumn><TrashIcon onClick={() =>
{this.handleClickRemove(id);
}}/>
</TableRowColumn>
</TableRow>
// END TABLE ROWS
);
});
<div>
{/* FORM FOR ADDING EXPENSES(DATA) */}
<form id="expenseForm">
<h3>
Add a new <br />
expense
</h3>
<input
type="text"
id="fname"
name="fname"
placeholder="Item description"
onChange=
{this.handleChange('item_description')}
/>
<br />
<br />
<input
type="text"
id="lname"
name="lname"
placeholder="Item price"
onChange={this.handleChange('item_price')}
/>
<br />
<input
type="text"
id="lname"
name="lname"
placeholder="Item link"
onChange={this.handleChange('item_link')}
/>
<br />
{/* END FORM */}
<RaisedButton
id="expSubmit"
label="Submit Expense"
primary={true}
style={style}
onClick={this.handleClick}
/>
{/* TABLE TOTAL KEEPS CURRENT TOTAL OF PRICE COLOUMN */}
<h1>Total:</h1>
<br />
<h3>$748.93</h3>
</form>
{/* TABLE HEADERS */}
<Table>
<TableHeader>
<TableRow>
<TableHeaderColumn>Item
description</TableHeaderColumn>
<TableHeaderColumn>Purchase
Date</TableHeaderColumn>
<TableHeaderColumn>Item
Price</TableHeaderColumn>
<TableHeaderColumn>Item
Link</TableHeaderColumn>
<TableHeaderColumn>Edit
entry</TableHeaderColumn>
<TableHeaderColumn>Delete
entry</TableHeaderColumn>
</TableRow>
</TableHeader>
<TableBody>
{tableRows}
</TableBody>
</Table>
</div>
);
}
return (
<div>
<Nav />
{content}
</div>
);
}
}
// this allows us to use <App /> in index.js
export default connect(mapStateToProps)(ExpenseTable);
//样式变量BOR物料按钮
常量样式={
差额:12
//
};
常量mapStateToProps=(状态)=>({
用户:state.user,
reduxState:state.getExpense
});
类ExpenseTable扩展组件{
建造师(道具){
超级(道具);
此.state={
getExpense:[]
};
}
isSelected=(索引)=>{
返回此.state.selected.indexOf(index)!=-1;
};
HandlerRowsElection=(selectedRows)=>{
这是我的国家({
已选择:selectedRows,
});
};
//在页面加载时,DISPATCH GET_费用为
//发送到expenseSaga,然后
//转到getExpenseReducer并将费用_数据附加到
//多姆
componentDidMount(){
const{id}=this.props.match.params;
this.props.dispatch({type:USER\u ACTIONS.FETCH\u USER});
this.props.dispatch({type:'GET_EXPENSE'});
}
componentDidUpdate(){
如果(!this.props.user.isload&&this.props.user.userName==
空){
这个.props.history.push('home');
}
}
注销=()=>{
this.props.dispatch(triggerLogout());
//这个.props.history.push('home');
};
//设置所有输入的状态
handleChange=(名称)=>{
返回(事件)=>{
这是我的国家({
[名称]:event.target.value
});
};
};
//SUBMIT按钮-触发发送到EXPENSE SAGA以添加数据
handleClick=()=>{
console.log('add expense',this.state);
这是我的道具({
键入:“添加费用”,
有效载荷:这个状态
});
};
//垃圾箱图标-触发发送到费用传奇删除
handleClickRemove=(id)=>{
console.log('delete expense',this.state);
这是我的道具({
键入:“删除费用”,
有效载荷:id
});
};
handleClickEdit=(行)=>{
console.log('edit expense',this.state)
这是我的道具({
键入:“编辑费用”,
有效载荷:世界其他地区
})
}
render(){
log('HEY-ooooo expense render',this.state);
让content=null;
if(this.props.user.userName){
//映射到REDUX州。
const tableRows=this.props.reduxState.map((行)=>{
//.MAP将数据分隔为单个项。
常数{id,项目描述,购买日期,
项目价格,项目链接=行;
返回(
{/*表行*/}
{项目描述}
{购买日期}
${item_price}
{this.handleClickEdit(行)}}/>
{this.handleClickRemove(id);
}}/>
//结束表行
);
});
{/*增加费用的表格(数据)*/}
添加一个新的
费用
{/*结束形式*/}
{/*表总计保留当前价格列总计*/}
总数:
$748.93
{/*表头*/}
项目
描述
购买
日期
项目
价格
项目
链接
编辑
进入
删除
进入
{tableRows}
);
}
返回(
{content}
);
}
}
//这允许我们在index.js中使用
导出默认连接(MapStateTops)(费用表);
默认物料界面表格没有在线编辑功能。要实现这一点,您必须编写自己的包装器,这可能非常耗时。为了克服时间问题,我们可以使用一些好的现有库。
这里有一个来自DevExtreme的功能强大的库,与我使用的相同,但在您做出最终决定之前,请先查看它们的许可证