React小白 工作上的使用记录

570 阅读2分钟

这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战

工作上要使用react + Typescript 去开发webpart,我真的是从零开始学啊,现在把之前不会的,记录一下.

Tips:vs code 在终端下使用 code ./ 打开当前项目,不行的话,需要command+shift +P ->shell command 选择安装code命令就好了

下拉框 遍历生成

在最上面的state中声明 TypeOfActivityChoices这个数组,然后遍历生成选项,getValue,为了获取选中的值.

public getValue = (event) => {
        //获取被选中的值
        console.log(event.target.value);
        this.setState({
            //默认值改变
            TypeOfActivityChoice: event.target.value
        })

    }

<span>Type of activity</span>
                                <select name='TypeOfActivityChoice' value={this.state.TypeOfActivityChoice} onChange={(e) => this.getValue(e)}>
                                    {
                                        // 遍历option
                                        this.state.TypeOfActivityChoices.map((ele, index) => {
                                            return (
                                                <option key={index}>{ele}</option>
                                            )
                                        })
                                    }
                                </select>

声明对象的写法

有好几种,我使用了这一种:

var comfirm_GaoFlynt = { name: "Flynt Gao",  Tele: "+86 123456", Email:  Location: "Tianjin",  }

时间日期遇到的坑

想生成一个编号,去确立两个表之间的关系,想了一下,还是用时间吧

const timestamp = date.getFullYear() + (date.getMonth() + 1).toString() + date.getDate().toString() + date.getHours().toString() + date.getMinutes().toString() + date.getSeconds().toString();

我这是写的挺笨的,新手,我只是想记一下,它这个月跟Java一样 从0开始,今天是二月十二号给我出来个一,我当时傻了一会,嘿嘿.还有一个事情就是:

  • 年 date.getYear()
  • 月 date.getMonth()
  • 日 date.getDate() 这个不是getDay() ,day这个是一周的第几天

SharePoint的webpart初始化是这个方法

需要在页面一开始的时候用到的东西,要写在componentDidMount 这个里面

public componentDidMount(): void {
       this.getCurrentUserProfile();
       // 进入页面时设置默认值
       this.setPerson("Kyrie Gao");
       // 初始化时间 作为主键
       this.setTimeStamp()
   }

SharePoint 提交数据到List的方法

需要提交的数据,要写在request的请求里,然后调用API去存储.

//表单提交到另一个表的方法
    public submitTable(event) {
        const request: any = {};
        request.body = JSON.stringify({
            //表单数据
            hours: this.state.hours,
            vehicles: this.state.veh,
            amount: this.state.Amount,
            OData__x0025_: this.state.Percent,
            Staircase_x0025_: this.state.Staircase,
            Total: this.state.Total,
            lookupId: this.state.Id,
        });
        this.props.context.spHttpClient.post(
            this.props.context.pageContext.web.absoluteUrl + `/_api/web/lists/getbytitle('calculation')/items`,
            SPHttpClient.configurations.v1,
            request)
            .then(
                (response: SPHttpClientResponse) => {
                    alert(response.status)
                })
        alert("submitTable执行完了")
    }

需要注意的是,在SharePoint的List里面,显示的列表项的名字会和在程序内部的不一样,比如 有空格的话就是用ASCII码来表示,还有()这种也是,但自己去查是在太慢了,我的解决方案先给他查一遍,然后debug去看到底是啥名字.

查找SharePoint List的列表项

也是一样,调用API去查到列表项,

  • getbytitle('calculation') 这项是列表的名字
  • /items 后面不加任何参数 是查询所有的列表项的值
  • ?$select=ACEId ?是追加参数的意思,select相当于SQL里面的where条件
  • desc&$top 这个是倒序排列
public getListACE() {
        var getUrl = `${this.props.context.pageContext.web.absoluteUrl}/_api/web/lists/getbytitle('calculation')/items?$select=ACEId&$orderby=ACEId desc&$top`;
        this.props.context.spHttpClient
            .get(
                getUrl,
                SPHttpClient.configurations.v1
            )
            .then(
                (response: SPHttpClientResponse) => {
                    return response.json();
                }
            ).then(
                (response) => {
                    this.setState({ ACEId: response.value[0].ACEId })
                }
            ).then(
                () => { alert(this.state.ACEId) }
            )
    }

好了,以后再遇到,就不用在大海里捞针了,找资料来解决问题了,以后学会了还会更新这个文章,作为记录.