我试图找出使用此Ant Tree component的错误。
我有两个组件,PageAdmin我进行了get调用,以获取有关树中应标记为已选中的节点的信息。我从服务器接收数据,并将其放入数组checkedKeys
中,并将其作为道具CustomTree发送到子组件,我可以看到CustomTree组件的道具已正确更新,但是未选择树中的节点,另外,当我选择另一个节点时,将清除checkedKeys
数组,并仅替换为新选择的节点...
有什么想法吗?
PageAdmin.js
import React, { Component } from "react";
import TreeMenu from "./TreeMenu";
import CustomTree from "./CustomTree";
import axios from "axios";
import "./PageAdmin.css"
const BASE_URL = "http://localhost:3000"
class PageAdmin extends Component {
constructor(props) {
super(props);
this.state = {
expandedKeys: [],
autoExpandParent: true,
checkedKeys: [],
selectedKeys: [],
treeData: [],
treeID: this.props.match.params.id
}
}
componentDidMount() {
axios
.get(`${BASE_URL}/eclass/all-nodes`)
.then(result => {
this.setState({
treeData: result.data
});
})
if (this.state.treeID) {
console.log("yes we have a treeID")
axios
.get(`${BASE_URL}/eclass/custom/${this.state.treeID}`)
.then(result => {
this.setState({
checkedKeys: result.data.checkedKeys
});
});
}
}
handleCheckChange = (checkedKeys) => {
this.setState({ checkedKeys });
console.log("checkedKeys", checkedKeys)
}
handleSelectChange = (selectedKeys) => {
this.setState({ selectedKeys });
console.log("selectedKeys", selectedKeys)
}
handleExpandChange = (expandedKeys) => {
this.setState({
expandedKeys,
autoExpandParent: false,
});
}
render() {
return (
<div>
<TreeMenu treeID={this.state.treeID} checkedKeys={this.state.checkedKeys} />
<CustomTree
onCheckChange={this.handleCheckChange}
onSelectChange={this.handleSelectChange}
onExpandChange={this.handleExpandChange}
checkedKeys={this.state.checkedKeys}
expandedKeys={this.state.expandedKeys}
selectedKeys={this.state.selectedKeys}
autoExpandParent={this.state.autoExpandParent}
treeID={this.state.treeID}
treeData={this.state.treeData} />
</div>
);
}
}
export default PageAdmin;
CustomTree.js
import React, { Component } from "react";
import { Tree } from 'antd';
import "./CustomTree.css"
import 'antd/dist/antd.css'
const TreeNode = Tree.TreeNode;
class CustomTree extends Component {
constructor(props) {
super(props);
this.state = {}
}
onExpand = (expandedKeys) => {
console.log('onExpand', arguments);
// console.log('expandedKeys', expandedKeys);
// if not set autoExpandParent to false, if children expanded, parent can not collapse.
// or, you can remove all expanded children keys.
this.props.onExpandChange(expandedKeys)
}
onCheck = (checkedKeys) => {
// console.log('onCheck', checkedKeys);
this.props.onCheckChange(checkedKeys);
}
onSelect = (selectedKeys, info) => {
// console.log('info', info);
// console.log("selectedKeys", selectedKeys)
this.props.onSelectChange(selectedKeys);
}
renderTreeNodes = (data) => {
return data.map((item) => {
if (item.children) {
return (
<TreeNode title={item.title} key={item.key} dataRef={item}>
{this.renderTreeNodes(item.children)}
</TreeNode>
);
}
return <TreeNode {...item} />;
});
}
render() {
return (
<Tree
checkable
onExpand={this.onExpand}
onCheck={this.onCheck}
onSelect={this.onSelect}
checkedKeys={this.props.checkedKeys}
expandedKeys={this.props.expandedKeys}
autoExpandParent={this.props.autoExpandParent}
selectedKeys={this.props.selectedKeys}
>
{this.renderTreeNodes(this.props.treeData)}
</Tree>
);
}
}
export default CustomTree;
最佳答案
也许您必须正确设置属性checkedKeys
和checkStrictly
。checkedKeys
:(受控)指定所检查的treeNodes的键(PS:当它指定也是父树treetree的treeNode的键时,将检查其所有子treetrees;反之,当它指定键时作为子treeNode的treeNode的父树nodeNode也会被检查。当checkable
和checkStrictly
为true时,其对象具有checked
和halfChecked
属性。 ,它们不会互相影响。
观看antd的文档以获取更多信息https://ant.design/components/tree/