Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
833 views
in Technique[技术] by (71.8m points)

react使用ant-design Tree组件使用treeData自定义title,给变量赋值后,却无法取得更新后的数据

react hook+ant-design(4.x版本) Tree组件,在自定义的title里面增加了两个操作按钮,点击编辑时更新 name 变量,页面也成功渲染出更新后的数据,但是当点击增加按钮,打印 name 变量时,得到的数据却是空的,代码如下:


import React, {Component, useState, useEffect} from 'react'
import {Tree} from 'antd'
import { PlusSquareOutlined, EditOutlined, CloseCircleOutlined, CheckCircleOutlined } from '@ant-design/icons'

function Tab() {
  const data1 = [
    {
      value: 'Root',
      defaultValue: 'Root',
      key: '0-1',
      parentKey: '0',
      isEditable: false
    }
  ]

  const [data, setData] = useState(data1)
  const [name, setName] = useState('')

  const renderTreeNodes = data => data.map((item) => {
        if (item.isEditable) {
            item.title = (
                <div>
                    <CloseCircleOutlined style={{ marginLeft: 10 }} onClick={() => onClose(item.key, item.defaultValue)}/>
                    <CheckCircleOutlined style={{ marginLeft: 10 }} onClick={() => onSave(item.key)} />
                </div>
            );
        } else {
            item.title = (
                <div>
                    <span>
                        {item.value}
                    </span>
                    <span> 
                        <EditOutlined style={{ marginLeft: 10 }} onClick={() => onEdit(item.key)}/>
                        <PlusSquareOutlined style={{ marginLeft: 10 }} onClick={() => onAdd(item.key)}/>
                    </span>
                </div>
            )
        }

        if (item.children) {
          renderTreeNodes(item.children);
        }
        return item;
    })

    useEffect(() => {
      renderTreeNodes(data)
    }, [])


  const onAdd = (e) => {
    // 此处打印 name 时无法打印出 name 的值
    console.log('name:', name)
  }

  const onEdit = (key) => {
    console.log('edit');
    // 此处给 name 变量赋值
    setName('12343')
  }
  const onClose = () =>{}
  const onSave = () => {}

  return (
    <div>
      <Tree treeData={data}></Tree>
      {/* 点击编辑按钮后,此处有渲染出来 */}
      <div>{name}</div>
    </div>
  )
}

export default Tab;

有没有小伙伴帮忙看下,是因为什么?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...