У меня есть ошибка при отправке новых данных в массив

Я делаю, чтобы взять древовидную структуру.

Мне нужно добавить данные и я хочу удалять, редактировать и искать

Когда я помещаю новые данные в массив до того, как эти данные сохранят новую переменную в этих данных в то время, я получаю одну ошибку

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;
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
352
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я предполагаю, что вы столкнулись с проблемой с этим фрагментом кода:

    if (test.title != '') {
    var m = treeData.push(test)
    // setTreeData(m);
    }

поэтому вы можете сделать это следующим образом:

if (test.title != '') {
    setTreeData([...treeData, test]);
    }

Я попробовал это... Но снова я получил ошибку консоли... (react-dom.development.js:14815 Неперехваченная ошибка: слишком много повторных рендеров. React ограничивает количество рендеров, чтобы предотвратить бесконечный цикл.)

Saranya S 10.12.2020 10:37

отладьте свой код еще немного, потому что именно так я добавляю элементы, и у меня это работает нормально. Должно быть что-то еще, что вызывает эту проблему.

Sakshi 10.12.2020 12:38

я проверил его в своем коде VS (только код treeData), и он правильно добавляет данные в treeData

Sakshi 10.12.2020 12:48

когда я нажимаю кнопку «Добавить» после ввода данных, все мои данные дерева будут скрыты и отображать массив больше раз (ошибка консоли)...

Saranya S 10.12.2020 13:47

Я получил данные в консоли... но не могу показать эти данные в моем дереве, а также какое-либо событие произошло в данных моего дерева в этот раз, только добавляя больше времени для каждого события...

Saranya S 10.12.2020 13:59

функция отправки данных будет отображаться до того, как будут запущены мои функции данных дерева... Я больше запутался... можете ли вы дать мне какие-либо решения...

Saranya S 10.12.2020 14:01

Вы можете вставить свой код в codeandbox.io, чтобы я мог увидеть живую демонстрацию? и отлаживать соответственно

Sakshi 10.12.2020 14:16

хорошо... я вставлю свой код в codeandbox.io

Saranya S 11.12.2020 07:03

я вставил этот код в useEffect после того, как он работает четко... спасибо Сакши...

Saranya S 11.12.2020 10:59

привет... это моя ссылка на песочницу кода Привет, привет, у меня возникла ошибка при запуске моего проекта в песочнице кода... Я бы прикрепил свою живую ссылку ниже... 7p2mg?file=/src/index.j‌​s Кто-нибудь поможет мне четко запустить мой проект...

Saranya S 15.12.2020 09:21

попробуйте useState<string[]>(defaultValues) или useState([])

Я не знаю, как поставить этот код... не могли бы вы привести подробный пример для меня...

Saranya S 10.12.2020 10:40

Другие вопросы по теме