当前位置: 首页 > news >正文

东莞网站建设公司制作网站个人网站可以做淘宝客网站吗

东莞网站建设公司制作网站,个人网站可以做淘宝客网站吗,提供资料下载的网站如何建设,iis服务器网站301重定向怎么做一、问题描述封装了一个Chart组件,它接收一个boolean类型的props,根据这个boolean的true或false执行不同的操作。经过console.log验证,onReady函数只会在组件初次渲染时取到props值,不管后面的props变化成什么都无法重新取值。二、…

一、问题描述

封装了一个Chart组件,它接收一个boolean类型的props,根据这个boolean的true或false执行不同的操作。经过console.log验证,onReady函数只会在组件初次渲染时取到props值,不管后面的props变化成什么都无法重新取值。

二、代码描述

初始化状态为0,useRequest拿到后端的值为1。

传递给Chart组件的props,是可以拿到最新的,可以在40行的打印中看到。

但是onReady挂载的坐标轴点击事件打印出的却不会变化,依然是0。

// 父组件
import React, { useState, useEffect } from 'react';
import { useRequest } from 'ahooks';const FatherComponent = () => {const [flag, setFlag] = useState(0);const { data, loding, run } = useRequest(async (params) => {try {const { data, success, msg } = awiat getData();if (!success) {return [];}setFlag(data.flag)return data;} catch(e) { console.log(e) };return [];}, { manual: true })useEffect(() => {if (!isUndefined(data)) {setFlag(data.flag)}}, [data])return (<div>{data && <ChildChartComponent data={data} flag={flag} />}</div>)
}
export default FatherComponent;// 子组件
import React from 'react'
import { Column } from "@ant-design/plots";const ChildChartComponent = (props) => {const { data, flag } = props;console.log(flag)const config = {data,// ...many config settings, it's unimportantonReady: (plot) => {plot.on("axis-label:click", (e) => {if (Number(flag) === 1) {console.log('执行props.flag为true的逻辑');} else {console.log('执行props.flag为false的逻辑');}})}}return (<Column {...config} />)
}
export default ChildChartComponent;

三、原因解析

这个问题研究了整整一天,换了很多种方式都寻找不到问题所在。

一开始想是我得状态不对,再之后是觉得是最新的onReady没有被重新赋值给chart组件。

在官方文档中没找到相关问题描述,于是乎,我打开Github进入到组件仓库,在issues里找Bug和提问,终于被我找到跟我有相关问题的同志。

原来是因为onReady()函数是一个闭包,在子组件初次渲染的时候,它保存的值是初始值0,所以一直拿不到新状态。

四、修改子组件的写法,利用useRef解决闭包问题

我们声明一个ref,在effect中的deps校验规则设置为flag,effect方法内将ref的current每一次都指向flag。

将onReady中的on方法内的通过flag判断改为通过flagRef.current判断即可。

useRef可以解决闭包问题的原因在于: useRef 返回的是 { current: null },将对应数据赋值给 current,在声明之后,引用地址是不变的。

// 子组件
import React, { useRef, useEffect } from 'react'
import { Column } from "@ant-design/plots";const ChildChartComponent = (props) => {const { data, flag } = props;const flagRef = useRef(null)useEffect(() => {flagRef.current = flag;}, [flag])const config = {data,// ...many config settings, it's unimportantonReady: (plot) => {plot.on("axis-label:click", (e) => {if (Number(flagRef.current) === 1) {console.log('执行props.flag为true的逻辑');} else {console.log('执行props.flag为false的逻辑');}})}}return (<Column {...config} />)
}
export default ChildChartComponent;

http://www.yayakq.cn/news/688580/

相关文章:

  • 网站建设需要的流程im聊天软件开发
  • 重庆专业的网站建设公司html5网络公司网站模板
  • 南京网站制作设计公司安装discuz x 3.1 网站虚拟主机的要求
  • 网站建设报价单表格天津企业展厅设计公司
  • 网站的做网站公司出口网站建设方案
  • 手机老是下载一些做任务的网站建设020网站需要多少钱
  • 天津 交友 网站建设做业务的网站
  • linuxvps建站教程青岛企业名录大全
  • 商务网站创建经费预算网站建设的运营计划
  • 用php源码如何建设网站浏览器游戏网址
  • 电商网站建设论文参考文献wordpress 主页 插件
  • 怎么快速推广网站如何设置中国建设银行网站
  • 专业做网文的网站有哪些苏州网站建设哪家快
  • 上海专业网站建设费用wordpress在线安装
  • 电商网站建设懂你所需杭州建设网考试信息网
  • 监理企业建设部网站年报工程项目信息
  • 六安建设机械网站优秀集团网站
  • qt 可以做网站吗最火的传奇手游网站
  • 张槎网站设计杭州建设工程交易网
  • 手机触屏版网站管理系统仿v电影wordpress
  • wordpress检查全站链接wordpress两步验证码
  • 网站设计规划范文建个大型网站要多少钱
  • 肇东网站建设云聚达网站建设考评表
  • 十三五关于网站建设免费下载微信2023
  • 网站备案初审过了建筑工程信息网站
  • 做本地房产网站wordpress小程序扫码登录
  • 深圳建站公司优化wordpress 列表页输出
  • 在线网站编辑前端个人介绍网站模板下载
  • 网做网站方案解决网站
  • 南京网站推广价格设计型网站