Я делаю, чтобы взять древовидную структуру.
Мне нужно добавить данные и я хочу удалять, редактировать и искать
Когда я помещаю новые данные в массив до того, как эти данные сохранят новую переменную в этих данных в то время, я получаю одну ошибку
TypeError: treeData.push is not a function
Как установить эти данные в новую переменную и как отправить массив...
DragandDrop.js:
import React, {
useState,
Component,
useEffect
} from "react";
import 'react-sortable-tree/style.css';
import {
removeNodeAtPath
} from 'react-sortable-tree';
import SortableTree from 'react-sortable-tree';
import {
toggleExpandedForAll
} from 'react-sortable-tree';
import './styles.css'
const Treeview = (props, reset) => {
console.info('props', props)
const initTreeData = [{
title: 'Data_1',
children: [{
title: "Data_2"
}]
},
{
title: 'Data_1'
},
{
title: 'Data_2'
}
]
console.info('test', initTreeData.length)
var test = {
index: initTreeData.length + 1,
title: props.info
}
useEffect(() => {
_fetchGeneral();
}, [])
const [treeData, setTreeData] = useState(initTreeData);
console.info(treeData, "*******")
if (test.title != '') {
var m = treeData.push(test)
// setTreeData(m);
}
const _fetchGeneral = async () => {
setTreeData(initTreeData);
}
const updateTreeData = (e) => {
setTreeData(e);
}
// Expand and collapse code
const expand = (expanded) => {
setTreeData(toggleExpandedForAll({
treeData: treeData,
expanded,
}), );
}
const expandAll = () => {
expand(true);
}
const collapseAll = () => {
expand(false);
}
// Expand and collapse code end
// remove node
const removeNode = (rowInfo) => {
let {
node,
treeIndex,
path
} = rowInfo;
setTreeData(removeNodeAtPath({
treeData: treeData,
path: path, // You can use path from here
getNodeKey: ({
node: TreeNode,
treeIndex: number
}) => {
console.info(number, 'event');
return (number);
},
ignoreCollapsed: false,
}))
}
// remove node end
return ( <
div style = {
{
display: 'flex',
flexDirection: 'column',
height: '100vh'
}
} >
<
div style = {
{
flex: '0 0 auto',
padding: '0 15px'
}
} >
<
h3 > Full Node Drag Theme < /h3> <
button onClick = {
expandAll
} > Expand All < /button> <
button onClick = {
collapseAll
} > Collapse All < /button> &
nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
<
/div>
<
div style = {
{
flex: '1 0 50%',
padding: '0 0 0 15px'
}
} >
<
SortableTree className = "tree-dt"
id = "add_name"
treeData = {
treeData
}
onChange = {
updateTreeData
}
generateNodeProps = {
rowInfo => ({
buttons: [ <
div >
<
button label = 'Delete'
onClick = {
() => removeNode(rowInfo)
} > X < /button> < /
div > ,
],
style: {
height: '50px',
}
})
}
canDrag = {
({
node
}) => !node.dragDisabled
}
/> < /
div > <
/div>
);
}
export default Treeview;
Файл Add.js:
import React, {
useState
} from 'react';
import {
TextField
} from '@fluentui/react/lib/TextField';
import {
DefaultButton,
PrimaryButton,
Stack,
IStackTokens
} from '@fluentui/react';
import './styles.css'
const TextFieldBasicExample = (props) => {
const [newItemValue, setNewItemValue] = useState({
title: ''
});
console.info('onchange', newItemValue);
const handleChangeEvent = (e) => {
setNewItemValue({
[e.target.name]: e.target.value,
});
}
const _insert = (event) => {
console.info('onclick', newItemValue);
props.callback(newItemValue);
// setNewItem({
// [event.target.name]:''
// })
}
return ( <
Stack horizontal >
<
Stack className = "add-inp" >
<
TextField label = "Add Item"
name = "title"
onChange = {
handleChangeEvent
}
/> <
span id = "error_name" > < /span> <
PrimaryButton text = "Add"
className = "add-btn"
onClick = {
_insert
}
/>
<
/Stack> <
/Stack>
);
};
export default TextFieldBasicExample
файл app.js:
import React, {
useState,
Component,
useEffect
} from "react";
import 'react-sortable-tree/style.css';
import TreeView from "./Drag&Drop";
// import Test from "./Testing";
import AddEdit from "./Add";
import './styles.css'
const Tree = (props) => {
const [info, setInfo] = useState('');
const data = (item) => {
let value = item.title;
setInfo(value);
}
console.info('data', info)
return ( <
div >
<
div className = "add-dt" >
<
div className = "left-side" >
<`enter code here`
AddEdit callback = {
data
}
/> <
/div> <
div className = "right-side" >
<
TreeView info = {
info
}
/> <
/div> <
/div>
<
/div>
);
}
export default Tree;
Я предполагаю, что вы столкнулись с проблемой с этим фрагментом кода:
if (test.title != '') {
var m = treeData.push(test)
// setTreeData(m);
}
поэтому вы можете сделать это следующим образом:
if (test.title != '') {
setTreeData([...treeData, test]);
}
отладьте свой код еще немного, потому что именно так я добавляю элементы, и у меня это работает нормально. Должно быть что-то еще, что вызывает эту проблему.
я проверил его в своем коде VS (только код treeData), и он правильно добавляет данные в treeData
когда я нажимаю кнопку «Добавить» после ввода данных, все мои данные дерева будут скрыты и отображать массив больше раз (ошибка консоли)...
Я получил данные в консоли... но не могу показать эти данные в моем дереве, а также какое-либо событие произошло в данных моего дерева в этот раз, только добавляя больше времени для каждого события...
функция отправки данных будет отображаться до того, как будут запущены мои функции данных дерева... Я больше запутался... можете ли вы дать мне какие-либо решения...
Вы можете вставить свой код в codeandbox.io, чтобы я мог увидеть живую демонстрацию? и отлаживать соответственно
хорошо... я вставлю свой код в codeandbox.io
я вставил этот код в useEffect после того, как он работает четко... спасибо Сакши...
привет... это моя ссылка на песочницу кода Привет, привет, у меня возникла ошибка при запуске моего проекта в песочнице кода... Я бы прикрепил свою живую ссылку ниже... 7p2mg?file=/src/index.js Кто-нибудь поможет мне четко запустить мой проект...
попробуйте useState<string[]>(defaultValues) или useState([])
Я не знаю, как поставить этот код... не могли бы вы привести подробный пример для меня...
Я попробовал это... Но снова я получил ошибку консоли... (react-dom.development.js:14815 Неперехваченная ошибка: слишком много повторных рендеров. React ограничивает количество рендеров, чтобы предотвратить бесконечный цикл.)