javascript - 如何更新状态数组?

标签 javascript arrays reactjs state material-table

我正在用 Reactjs 制作一个应用程序。在其中我有一个 API,它从 AWS 数据库表中获取数据并填充一个状态数组,然后填充一个表。 我不知道如何让用户依次更新表的值,然后保存这些更改并让 API 将其上传回数据库。 我有一个更新方法,但它给出了一个错误,指出我无法更新状态数组或者会提示列数组未定义。

我有以下代码:

export default function Complaints(props) {

    const [complaint, setComplaint] = useState([]);
    const [isLoading, setIsLoading] = useState(true);
    const [isInEditMode, setIsEditMode] = useState(false);
    const [defaultValue, setDefaultValue] = useState("");

    var columsArr = [
        { title: 'Customer ID', field: 'id' },
        { title: 'Issue', field: 'complaintName' },
        { title: 'Description', field: 'complaintDescription'},
        { title: 'Order ID', field: 'complaintOrderId'},
        { title: 'Submitted', field: 'createdAt'},
        { title: 'Updated', field: 'updatedAt'},
        { title: 'Admin Comment', field: 'adminComment'},
    ];

    useEffect(() => {
        async function onLoad() {
            if (!props.isAuthenticated) {
                return;
            }

            try {
                const complaint = await loadComplaint();
                setComplaint(complaint);
                setState({
                    columns: [state.columns, ...columsArr],
                    complaint: [...state.complaint, ...complaint]
                });
                console.log(complaint)
            } catch (e) {
                alert(e);
            }

            setIsLoading(false);
        }

        onLoad();
    }, [props.isAuthenticated]);

    function loadComplaint() {
        return API.get("kleen", "/Complaint");
    }

    // function edit(adminComment) {
    //     setIsEditMode(true);
    //     setDefaultValue(adminComment);
    //     console.log("value is"+ adminComment);
    // }

    // function updateComplaint() {
    //     return API.put("kleen", `/Complaint/${props.}`);
    // }

    const [state, setState] = React.useState({
        columns: [],
        complaint: []
});

    return (
        <MaterialTable style={{
            marginTop: "8rem",
            marginLeft: "auto",
            marginRight: "auto",
            position: "sticky",
        }}
            title="Complaints"
            columns={state.columns}
            data={state.complaint}
            editable={{
                onRowUpdate: (newData, oldData) =>
                    new Promise(resolve => {
                        setTimeout(() => {
                            resolve();
                            if (oldData) {
                                let key = 1;
                                setState(prevState => {
                                    complaint: prevState.complaint.map(el => el.key === key ? {...el, adminComment: "testing"}: el)
                                    // const data = [...prevState.data];
                                    // data[data.indexOf(oldData)] = newData;
                                    // return { ...prevState, data };
                                });
                            }
                        }, 600);
                    }),
            }}
        />
    );
}

我是 Reactjs 的新手,非常感谢任何帮助。

最佳答案

您可以实现的一种方法是:

  1. 首先将状态存储在一个变量中
  2. 更新数组变量
  3. 将变量恢复到状态。

关于javascript - 如何更新状态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58853804/

相关文章:

javascript - Highcharts:从具有多个系列的图中选择单个系列

javascript - Angular 5 : Multiple requests at once with forkJoin

javascript - 相同的 HTML 的 DOM 结构会因浏览器而异吗

Android RxJava 记住变量

reactjs - 在 nextjs 中,对象类型从服务器端更改为客户端

javascript - 将视频带到特定时间的html5视频按钮

javascript - 将变量函数传递给数组 [Javascript]

javascript - 初始化多维数组的循环/递归方法

node.js - 在 Windows 系统上安装 React Project 时出现问题

javascript - 如何使用 map 方法将查询参数传递给 api,并将每个 json 响应连接到 react 中的 setState?