Terryzjh 2021-09-23 19:03 采纳率: 100%
浏览 516
已结题

react怎么获取后端接口,并渲染。


import { Button } from "antd";
import React from "react";


export class Inputt extends React.Component {
    constructor(props) {
         super(props);
         this.state = {
              textareaValue: [],//改为数组
              bgcolor:'#f00'
         }

    }

    render() {
         const buttonOnClick = (e) => {
         var state=this.state.textareaValue;
         var index=state.findIndex(i=>i==e.currentTarget.value);//找到点击按钮值的下标
         if(index==-1){//不存在压入数组
         state.push(e.currentTarget.value);
         }
         else{//存在则移除
         state.splice(index,1);
         }
              this.setState({
                    textareaValue:state
              })
         }

         const textareaonChange = (e) => {
              this.setState({
                    textareaValue: e.target.value
              })
         }
         function renderButton(words,state){
            var btns=[];
            for(var v of words)btns.push(<Button style = {{background:state.textareaValue.find(i=>i==v)?state.bgcolor:''}} shape='round' onClick={(e) => buttonOnClick(e) }  value={v} key={v}>{v}</Button>)
            return btns;
         }
         var words=['过度授权','重复授权','授权死循环','应用截图与demo不一致','页面无法打开'];

         return (
              <div>
                    {renderButton(words,this.state)}
                    <hr></hr>
                    <textarea style={{width:500}} value={this.state.textareaValue.join(';')} onChange={(e) => textareaonChange(e)}></textarea>
              </div>

         )
    }
}

approval/getApprovalOpinionTag 这是GET请求,是Button标签( var words=['过度授权','重复授权','授权死循环','应用截图与demo不一致','页面无法打开'];)的

img


还需要什么,可以给我说下。万分感谢

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2021-09-23 21:01
    关注

    可以用reqwest模块加载接口数据后调用this.setState更新状态数据。或者直接用原生的fetch对象获取数据也行,fetch使用参考

    代码大概如下

    
    
        import { Button } from "antd";
        import React from "react";
    
        export class Inputt extends React.Component {
            constructor(props) {
                super(props);
                this.state = {
                    textareaValue: [],//改为数组
                    bgcolor: '#f00',
                    words:[]//新增words属性,以便fetch更新
                }
            }
    
            componentDidMount() {//增加组件mount事件
                //fetch获取数据
                fetch('/approval/getApprovalOpinionTag').then(res => {
                    return res.json();
                }).then(data => {
                    console.log(data)
                    this.setState({ words: data.data })//更新
                });
            }
            render() {
                const buttonOnClick = (e) => {
                    var state = this.state.textareaValue;
                    var index = state.findIndex(i => i == e.currentTarget.value);//找到点击按钮值的下标
                    if (index == -1) {//不存在压入数组
                        state.push(e.currentTarget.value);
                    }
                    else {//存在则移除
                        state.splice(index, 1);
                    }
                    this.setState({
                        textareaValue: state
                    })
                }
                const textareaonChange = (e) => {
                    this.setState({
                        textareaValue: e.target.value
                    })
                }
                function renderButton(words, state) {
                    var btns = [];
                    for (var v of words) btns.push(<Button style={{ background: state.textareaValue.find(i => i == v) ? state.bgcolor : '' }} shape='round' onClick={(e) => buttonOnClick(e)} value={v} key={v}>{v}</Button>)
                    return btns;
                }
                //var words = ['过度授权', '重复授权', '授权死循环', '应用截图与demo不一致', '页面无法打开'];//数据通过fetch从接口获取,看componentDidMount事件,下面的componentDidMount注意看修改过参数插入
                return (
                    <div>
                        {renderButton(this.state.words, this.state)}
                        <hr></hr>
                        <textarea style={{ width: 500 }} value={this.state.textareaValue.join(';')} onChange={(e) => textareaonChange(e)}></textarea>
                    </div>
                )
            }
        }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月26日
  • 创建了问题 9月23日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加