Datatables 编辑React+;重演

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) => ({

我在react项目中有一个material UI表,我希望用户单击铅笔/编辑图标来编辑表行

这是一个加载的问题,但这是否需要一个额外的材料UI?让这一切发生的逻辑是什么??我在后端设置了大部分代码,但不知道如何在组件中编写这些代码

谢谢你的关注

//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的功能强大的库,与我使用的相同,但在您做出最终决定之前,请先查看它们的许可证