react.elementを持つオブジェクトをディープクローンするにはどうすればよいですか?

アリ・アフマディ

react要素を持つオブジェクトをディープクローンすると、その要素が壊れ、その要素をレンダリングできなくなります。
これは、この問題を示す例です。

import React from "react";
import "./styles.css";

import Demo from "./Demo";

export default function App() {
  const test = <div>I'm a react element</div>;
  console.log("test", test);

  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <Demo obj={{ element: test }} />
    </div>
  );
}

//Demo.js

import React from "react";
// import cloneDeep from "lodash.clonedeep";
import CloneDeep from "clone-deep";

const Demo = ({ obj }) => {
  const newProps = CloneDeep(obj);
  console.log(newProps.element);
  // console.log("Demo element", newProps.element);
  return (
    <div>
      I'm Demo Component
      {newProps.element}
    </div>
  );
};

export default Demo;

他にもいくつかのディープクローニングライブラリを試しましたが、私の場合はどれも機能しないようです!それで、これを行うライブラリを知っていますか?または多分私は何かをすることによって現在のクローン作成ライブラリを修正することができますか?または多分私は自分のディープクローニングを書くことができます、それに関するヒントはありますか?
私がこれまでに試したこと:
1-import CloneDeep from "clone-deep";これを使用するとobjects are not valid as a react childエラーが発生します
2-これを使用するとimport cloneDeep from "lodash.clonedeep";前のライブラリと同じエラーは発生しませんが、エラーがinfinity loop, Max Stack発生します!
ありがとう。

アリ・アフマディ

私はgithub clone-deep彼らのコードコピーしていくつかの変更を加えました
1-最初に値がreact要素であるかどうかを確認しますReact.isValidElement
2- @ warmachineのおかげでReact.cloneElement、オブジェクトがreact要素であるかどうかを使用してオブジェクトを複製し、そうでない場合は私は図書館がいつもしていたことをします

ここで完全なコードを見ることができます:

import React from "react";
const clone = require("shallow-clone");
const typeOf = require("kind-of");
const isPlainObject = require("is-plain-object");

export function cloneDeep(val, instanceClone) {
  if (React.isValidElement(val)) {
    return React.cloneElement(val);
  } else {
    const valueType = typeOf(val);
    switch (valueType) {
      case "object":
        return cloneObjectDeep(val, instanceClone);
      case "array":
        return cloneArrayDeep(val, instanceClone);
      default: {
        return clone(val);
      }
    }
  }
}

function cloneObjectDeep(val, instanceClone) {
  if (typeof instanceClone === "function") {
    return instanceClone(val);
  }
  if (instanceClone || isPlainObject(val)) {
    const res = new val.constructor();
    for (let key in val) {
      res[key] = cloneDeep(val[key], instanceClone);
    }
    return res;
  }
  return val;
}

function cloneArrayDeep(val, instanceClone) {
  const res = new val.constructor(val.length);
  for (let i = 0; i < val.length; i++) {
    res[i] = cloneDeep(val[i], instanceClone);
  }
  return res;
}

もちろん、これは私がより良いものを見つけるか、うまくいけばgitハブの所有者が私が投稿した問題を反映するまでの一時的な解決策です

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Reactでオブジェクトをディープクローンするにはどうすればよいですか?

分類Dev

Reactで動的キーを持つオブジェクトをマッピングするにはどうすればよいですか?

分類Dev

ReactでJSONオブジェクトをループするにはどうすればよいですか?

分類Dev

Reactで状態配列でデータオブジェクトをフィルタリングするにはどうすればよいですか?

分類Dev

ネストされたオブジェクト内のデータをreactでレンダリングするにはどうすればよいですか?

分類Dev

React Nativeを使用してオブジェクトのプロパティにアクセスするにはどうすればよいですか?

分類Dev

HTMLをオブジェクトプロパティの値としてreact状態で保存するにはどうすればよいですか?

分類Dev

Reactでオブジェクトのオブジェクトの小道具検証ルールを定義するにはどうすればよいですか?

分類Dev

SafeAreaViewをreact-nativeバージョン0.48.0でプロジェクトにインストールするにはどうすればよいですか?

分類Dev

(Reactプロジェクトの)非reactモジュール内でmoment()ライブラリを使用するにはどうすればよいですか?

分類Dev

小道具を使用してReactコンポーネントのオブジェクトを動的に構築するにはどうすればよいですか?

分類Dev

オブジェクトの名前を取得するために、reactコンポーネントのIDでデータのリストをフィルタリングするにはどうすればよいですか?

分類Dev

ネストされたオブジェクト(React)の1つのキーだけに影響を与えるにはどうすればよいですか?

分類Dev

iOSのreact-native-push-notificationで通知オブジェクトにデータを追加するにはどうすればよいですか?

分類Dev

React:キー名なしでネストされたJSONオブジェクトをマッピングするにはどうすればよいですか?

分類Dev

JSONオブジェクトをReactのコンポーネントに送信するにはどうすればよいですか?

分類Dev

Reactのデータからオブジェクトを作成するにはどうすればよいですか?

分類Dev

react jsを使用してSkypeオブジェクトをインポートするにはどうすればよいですか?

分類Dev

Reactマップを突破して、2つの値を持つオブジェクトを表示するにはどうすればよいですか?1つは配列、もう1つは文字列または数値(結果)です

分類Dev

オブジェクト(Redux、React)で(API jsonの)データを取得するにはどうすればよいですか?

分類Dev

保存したAntdDatePickerオブジェクトの値をReactに保存してロードするにはどうすればよいですか?

分類Dev

アップロードされた画像(画像オブジェクト)をレンダリングしてエラーが発生しないようにするにはどうすればよいですか(オブジェクトはReactの子として有効ではありません)?

分類Dev

このreactコンポーネント内のオブジェクトの状態配列を分解して、個々のフィールドデータを使用するにはどうすればよいですか?

分類Dev

React状態の配列内の特定のインデックスでオブジェクトを更新するにはどうすればよいですか?

分類Dev

React Typescriptのプロジェクト全体から未使用のインポート/宣言を削除するにはどうすればよいですか?

分類Dev

create-react-appベースのプロジェクトにフォントを追加するにはどうすればよいですか?

分類Dev

Reactを使用してオブジェクトのリストからテーブルを作成するにはどうすればよいですか?

分類Dev

React APPに渡されるJavaScriptオブジェクトで写真をフォーマットするにはどうすればよいですか?

分類Dev

ReactでAPIオブジェクトのプロパティにアクセスするにはどうすればよいですか?

Related 関連記事

  1. 1

    Reactでオブジェクトをディープクローンするにはどうすればよいですか?

  2. 2

    Reactで動的キーを持つオブジェクトをマッピングするにはどうすればよいですか?

  3. 3

    ReactでJSONオブジェクトをループするにはどうすればよいですか?

  4. 4

    Reactで状態配列でデータオブジェクトをフィルタリングするにはどうすればよいですか?

  5. 5

    ネストされたオブジェクト内のデータをreactでレンダリングするにはどうすればよいですか?

  6. 6

    React Nativeを使用してオブジェクトのプロパティにアクセスするにはどうすればよいですか?

  7. 7

    HTMLをオブジェクトプロパティの値としてreact状態で保存するにはどうすればよいですか?

  8. 8

    Reactでオブジェクトのオブジェクトの小道具検証ルールを定義するにはどうすればよいですか?

  9. 9

    SafeAreaViewをreact-nativeバージョン0.48.0でプロジェクトにインストールするにはどうすればよいですか?

  10. 10

    (Reactプロジェクトの)非reactモジュール内でmoment()ライブラリを使用するにはどうすればよいですか?

  11. 11

    小道具を使用してReactコンポーネントのオブジェクトを動的に構築するにはどうすればよいですか?

  12. 12

    オブジェクトの名前を取得するために、reactコンポーネントのIDでデータのリストをフィルタリングするにはどうすればよいですか?

  13. 13

    ネストされたオブジェクト(React)の1つのキーだけに影響を与えるにはどうすればよいですか?

  14. 14

    iOSのreact-native-push-notificationで通知オブジェクトにデータを追加するにはどうすればよいですか?

  15. 15

    React:キー名なしでネストされたJSONオブジェクトをマッピングするにはどうすればよいですか?

  16. 16

    JSONオブジェクトをReactのコンポーネントに送信するにはどうすればよいですか?

  17. 17

    Reactのデータからオブジェクトを作成するにはどうすればよいですか?

  18. 18

    react jsを使用してSkypeオブジェクトをインポートするにはどうすればよいですか?

  19. 19

    Reactマップを突破して、2つの値を持つオブジェクトを表示するにはどうすればよいですか?1つは配列、もう1つは文字列または数値(結果)です

  20. 20

    オブジェクト(Redux、React)で(API jsonの)データを取得するにはどうすればよいですか?

  21. 21

    保存したAntdDatePickerオブジェクトの値をReactに保存してロードするにはどうすればよいですか?

  22. 22

    アップロードされた画像(画像オブジェクト)をレンダリングしてエラーが発生しないようにするにはどうすればよいですか(オブジェクトはReactの子として有効ではありません)?

  23. 23

    このreactコンポーネント内のオブジェクトの状態配列を分解して、個々のフィールドデータを使用するにはどうすればよいですか?

  24. 24

    React状態の配列内の特定のインデックスでオブジェクトを更新するにはどうすればよいですか?

  25. 25

    React Typescriptのプロジェクト全体から未使用のインポート/宣言を削除するにはどうすればよいですか?

  26. 26

    create-react-appベースのプロジェクトにフォントを追加するにはどうすればよいですか?

  27. 27

    Reactを使用してオブジェクトのリストからテーブルを作成するにはどうすればよいですか?

  28. 28

    React APPに渡されるJavaScriptオブジェクトで写真をフォーマットするにはどうすればよいですか?

  29. 29

    ReactでAPIオブジェクトのプロパティにアクセスするにはどうすればよいですか?

ホットタグ

アーカイブ