微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处理兄弟组件之间的数据并更新父组件:React hooks

如何解决处理兄弟组件之间的数据并更新父组件:React hooks

我有在两个表之间移动数据的要求。我在父组件中获取数据,然后将其传递给 <Available/> 。从这个组件我应该能够选择数据项并添加它(也添加<Selected/> 组件。添加后,该行应该在可用内删除并移动到选定。以类似的方式我应该能够删除(也删除所有)来自 <Selected/> 组件的数据,这些数据又应该放回 <Avaiable/>。 我正在将 react-table 用于网格目的

我尝试过的代码https://codesandbox.io/s/react-hooks-example-forked-0rqb9

有人可以帮我吗

应用组件

import React,{ useState,useEffect } from "react";
import ReactDOM from "react-dom";
import { data } from "./data";
import { Available } from "./Available";
import { Selected } from "./Selected";

function App() {
  const [dataConfig,setDataConfig] = useState({ available: [],selected: [] });

  useEffect(() => {
    setDataConfig({ ...dataConfig,available: data });
  });

  function updateDataConfig() {}

  return (
    <>
      <div>
        <div>Available Table</div>
        <Available
          available={dataConfig.available}
          updateDataConfig={updateDataConfig}
        />
      </div>
      <div>
        <div> Selected Table</div>
        <Selected
          selected={dataConfig.selected}
          updateDataConfig={updateDataConfig}
        />
      </div>
    </>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />,rootElement);


可用

import React,useEffect } from "react";
import ReactTable from "react-table";
import "react-table/react-table.css";

export function Available({ available }) {
  const [data,setData] = useState([]);
  const [columns,setColumns] = useState([]);

  useEffect(() => {
    setData(available);
  },[available.length]);

  useEffect(() => {
    const columns = [
      {
        id: "check",accessor: "checkBox",Cell: ({ original }) => {
          return <input type="checkBox" className="checkBox" />;
        }
      },{
        id: "name",accessor: "name",Header: "Header"
      },{
        id: "age",accessor: "age",Header: "Age"
      }
    ];
    setColumns(columns);
  },[]);

  function handleAdd() {}

  function handleAddAll() {}

  return (
    <>
      <button type="button" onClick={handleAddAll}>
        Add All
      </button>
      <button type="button" onClick={handleAdd}>
        Add Selected
      </button>

      <ReactTable
        data={data}
        columns={columns}
        showPagination={false}
        minRows={5}
      />
    </>
  );
}

已选择

import React,useEffect } from "react";
import ReactTable from "react-table";
import "react-table/react-table.css";

export function Selected({ selected }) {
  const [data,setColumns] = useState([]);

  useEffect(() => {
    setData(selected);
  },[selected.length]);

  useEffect(() => {
    const columns = [
      {
        id: "check",Cell: ({ original }) => {
          return (
            <input type="button" onClick={handleDelete}>
              Delete
            </input>
          );
        }
      },[]);

  function handleDeleteall() {}

  function handleDelete() {}

  return (
    <>
      <button type="button" onClick={handleDeleteall}>
        Delete All
      </button>
      <ReactTable
        data={data}
        columns={columns}
        showPagination={false}
        minRows={5}
      />
    </>
  );
}

解决方法

检查我的 codesandbox 的一个小工作版本

我已经实现了“添加”和“删除”功能。 出于某种原因,复选框保持选中状态,我不明白为什么,但您可以清楚地了解它是如何工作的。

我也删除了内部状态 data 并且只使用了 props 传递的数据。

希望它能帮助您继续工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。