useState获取不到值undefined,数据一直为初始值不更新,用useRef解决

问题描述:
在进行单元格文本样式设置操作时,我使用了Jexcel提供的方法onselection,此方法可以获取到点击的单元格的名称(如:A1)
然后我想使用useState保存点击的单元格名称再进行改版字体样式,但是在要加粗字体的点击事件的地方,获取到的state一直undefined,就没办法进行修改字体样式
可能的原因是useState修改状态是异步的,当使用usestate对数据进行更新,并不能立刻获取到最新的数据。如果异步未执行完成时修改这个state的值,异步结束后获取的值仍然为原来的值
我一开始是使用useState,没有给初始值

const [choose,setchoose]=useState()

事件顺序是
在这里插入图片描述

由于异步未执行完成,所以一直获取到的就是undefined即初始值

所以这里需要用useRef来保存每次点击单元格的名称。

修改后完整代码:

import React, { useEffect, useRef, useState } from "react";
import "../../node_modules/jexcel/dist/jexcel.css";
import jexcel from 'jexcel'
import { Space } from "antd";
import 'material-design-icons/iconfont/material-icons.css';//引入导航上用到的图标
import { toJS } from "mobx";
let el:any;
const FirstJexcel = () => {
    let JexcelDom: HTMLDivElement;
    const choose=useRef() //保存选中的单元格
    let selectionActive = function(instance: any, x1: any, y1: any, x2: any, y2: any, origin: any) {
        var cellName1 = jexcel.getColumnNameFromId([x1, y1]);
        choose.current = cellName1 //保存单元格名称
    }
    const changestyle=()=>{
        console.log('choose',choose.current);   
      el.setStyle(choose.current,'font-weight', 'bold')
    }
    let option: any = {
        data: [[]],
        minDimensions: [10, 5],
        onselection: selectionActive,
        toolbar:[
        {
            type:"i",
            content:"format_bold",//图标
            onclick:changestyle  //点击事件
        }],
       
    }

    useEffect(() => {
        el = jexcel(JexcelDom, option)
    },[])

    return (
        <div>
            <div ref={(dom: HTMLDivElement) => JexcelDom = dom} />
            <br />
        </div>
    );
};
export default FirstJexcel;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值