前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >React 初学实现 异步获取表格数据列表展示,点击事件(传参)实例

React 初学实现 异步获取表格数据列表展示,点击事件(传参)实例

作者头像
泥豆芽儿 MT
发布2022-01-06 10:49:10
2.2K0
发布2022-01-06 10:49:10
举报
  • 初涉传说中的 【React】 为了减少多种实现方式的迷惑出现 在此只展示我实际操作中使用的方式

需求:就是在 React 语法下,点击表格中的数据,进行编辑、删除操作

  • 因为我是初学 React ,并非专业的前端开发,所以直接加载 js 文件
代码语言:javascript
复制
<!-- 加载 React -->
<!-- 注意: 部署时,将 "development.js" 替换为 "production.min.js"。-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<!-- 在项目中尝试 JSX -->
<script crossorigin src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script crossorigin src="https://cdn.staticfile.org/prop-types/15.6.1/prop-types.js"></script>
  • 鄙人最简化的源码整理如下
代码语言:javascript
复制
<script type="text/babel">
   // Button集合 组件
    class ButtonItem extends React.Component{
        constructor(props) {
            super(props);
            this.editForOpenPopups = this.editForOpenPopups.bind(this);
            this.delPostRecord = this.delPostRecord.bind(this);
        }
        //修改按钮点击事件
        editForOpenPopups(){
            const role_id = this.props.role_id;
            editForOpenPopups('✎ 角色信息修改',role_id, '67%', '');

        }
        //删除按钮的点击事件
        delPostRecord(event){
            //return event.preventDefault(); //如果不想后面的操作了
            const role_id = this.props.role_id;
            delPostRecord(role_id);
        }
        render(){
            return(
                <div className="layui-btn-group">
                    <button className="layui-btn layui-btn-sm layui-btn-normal" title="编辑"
                            onClick={this.editForOpenPopups}>
                        <i className="layui-icon">&#xe642;</i>
                    </button>
                    <button className="layui-btn layui-btn-sm layui-btn-danger" title="删除"
                            onClick={this.delPostRecord}>
                        <i className="layui-icon">&#xe640;</i>
                    </button>
                </div>
            )
        }
    }

    class TableNormal extends React.Component{
        // 构造函数的初始化数据处理
        constructor(props) {
            super(props);
            this.state = {roleList:[]};
        }

        //组件进入后,在第一次渲染后调用
        componentDidMount(){
            //ajax 数据获取
            var toUrl = "{:url('cms/admin/role')}";
            $.post(toUrl,function (result){
                const data = result.data;
                if(data.length > 0){
                    this.setState(()=>({
                        roleList:data
                    }))
                }
            }.bind(this),'JSON');
        }

        //当前组件元素渲染操作
        render(){
            return(
                <React.Fragment>
                    {this.state.roleList.map((role) =>
                        <tr key={role.id} className={"tr-normal-"+role.id}>
                            <td className="title">{role.user_name}</td>
                            <td><span className="span-updated_at">{role.updated_at}</span></td>
                            <td><span className="span-list_order">{role.list_order}</span></td>
                            <td><div dangerouslySetInnerHTML = {{ __html: role.status_tip}} /></td>
                            <td>
                                <ButtonItem role_id={role.id} />
                            </td>
                        </tr>
                    )}
                </React.Fragment>
            )
        }
    }
    //ReactDOM 的渲染操作
    ReactDOM.render(
        <TableNormal />,
        document.getElementById("table-tbody-normal")
    )
</script>
  • 【注意】 着重注意我对点击事件的使用 "onClick={this.delPostRecord} " 同时对比参考点击事件的定义
代码语言:javascript
复制
      this.delPostRecord = this.delPostRecord.bind(this);
    
	   //删除按钮的点击事件
       delPostRecord(role_id,event){
          //return event.preventDefault();  //如果不想后面的操作了
           delPostRecord(role_id);
       }

【总结】

鉴于点击事件的性能优化; 建议使用文中的方式,也可参考后面的文章; 对于富文本的转化显示,请注意 dangerouslySetInnerHTML 的使用!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档