簡體   English   中英

使用 Redux 工具包的設計模式

[英]Design Pattern with Redux Toolkit

我正在努力解決如何在我的項目中實施 redux 工具包。 我有一個獲取Setup對象的 API。 這些對象中的每一個都非常大,具有很多屬性。 我最初的方法是使用 RTK 獲取所有對象,但僅使用nameid道具。 然后,為單個完整的Setup object 設置一個單獨的切片,該切片將存儲所選Setup的所有道具。 這給我帶來了很多問題,因為 state 沒有正確加載。 當前的工作流程如下所示。 首先,加載所有Setups 然后,通過下拉 select 單個Setup 然后調用 RTK 查詢來獲取Setup的所有道具。 然后,將所有道具加載到切片中。 最后,將道具顯示到組件中。

您對如何以更簡單和實用的方式實現此功能有任何建議嗎? 我考慮過直接加載所有道具,而不僅僅是 id 和 name。 或者有兩個 RTK。 一個包含所有 Setups ,然后另一個緩存 RTK 用於單個Setup 要記住的一件事是,我計划然后對單個選定的設置執行不同的操作,例如更改名稱、過濾器等。

這是 API 的示例,我調用它來獲取所有Setup (只有nameid ):

[
    {
        "date": "Sat, 02 Jul 2022 00:14:50 GMT",
        "default": true,
        "id": "62bf8dfab60731051bcf77dd",
        "name": "Default 0"
    },
    {
        "date": "Thu, 30 Jun 2022 22:05:59 GMT",
        "default": false,
        "id": "62be1e47d4c5f49eb95cd06d",
        "name": "Filter Setup"
    }
]

這是單個Setup的所有道具的示例:

{
    "_id": {
        "$oid": "62be1e47d4c5f49eb95cd06d"
    },
    "name": "Filter Setup",
    "default": false,
    "filters": [
        {
            "id": {
                "$oid": "62bf8d03b60731051bcf77db"
            },
            "name": "RRR greater than 1"
        },
        {
            "id": {
                "$oid": "62bf8d09b60731051bcf77dc"
            },
            "name": "RRR greater than 1"
        }
    ],
    "state": {
        "schema": {
            "fields": [
                {
                    "name": "index",
                    "type": "integer"
                },
                {
                    "name": "#",
                    "type": "number"
                },
                {
                    "name": ".m_RRR",
                    "type": "number"
                },
                {
                    "name": ".r_Result",
                    "type": "number"
                },
                {
                    "name": ".r_Result 50% Candle SL",
                    "type": "number"
                },
                {
                    "name": ".m_Entry Candle",
                    "type": "string"
                },
                {
                    "name": ".m_Zone Touch #",
                    "type": "number"
                },
                {
                    "name": ".m_Zone Origin",
                    "type": "number"
                },
                {
                    "name": ".m_Re-entry @ Other Level",
                    "type": "string"
                },
                {
                    "name": ".m_Fast Into Profits",
                    "type": "string"
                },
                {
                    "name": ".m_Trade @ Range Over",
                    "type": "string"
                },
                {
                    "name": ".m_Checked",
                    "type": "string"
                },
                {
                    "name": ".p",
                    "type": "string"
                }
            ],
            "primaryKey": [
                "index"
            ],
            "pandas_version": "0.20.0"
        },
        "data": [
            {
                "index": 0,
                "#": 1.0,
                ".m_RRR": 3.37,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Hammer",
                ".m_Zone Touch #": 2.0,
                ".m_Zone Origin": 1.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 1,
                "#": 2.0,
                ".m_RRR": 2.43,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Hammer",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 2,
                "#": 3.0,
                ".m_RRR": 2.29,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Engulfing",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 3,
                "#": 4.0,
                ".m_RRR": 2.97,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Engulfing",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 4,
                "#": 5.0,
                ".m_RRR": 3.48,
                ".r_Result": null,
                ".r_Result 50% Candle SL": null,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 4.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 5,
                "#": 6.0,
                ".m_RRR": 3.22,
                ".r_Result": 3.22,
                ".r_Result 50% Candle SL": 3.22,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 4.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "Yes",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 6,
                "#": 7.0,
                ".m_RRR": 1.98,
                ".r_Result": 0.0,
                ".r_Result 50% Candle SL": 0.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 5.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 7,
                "#": 8.0,
                ".m_RRR": 4.8,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 2.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 8,
                "#": 9.0,
                ".m_RRR": 4.59,
                ".r_Result": 4.59,
                ".r_Result 50% Candle SL": 4.59,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 2.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "Yes",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 9,
                "#": 10.0,
                ".m_RRR": 1.71,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 2.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 10,
                "#": 11.0,
                ".m_RRR": 2.77,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 2.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 11,
                "#": 12.0,
                ".m_RRR": 2.15,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Hammer",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 12,
                "#": 13.0,
                ".m_RRR": 1.71,
                ".r_Result": 1.71,
                ".r_Result 50% Candle SL": 1.71,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 2.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "Yes",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 13,
                "#": 14.0,
                ".m_RRR": 6.0,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 4.0,
                ".m_Zone Origin": 1.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "Yes",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 14,
                "#": 15.0,
                ".m_RRR": 6.48,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 4.0,
                ".m_Zone Origin": 1.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "Yes",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 15,
                "#": 16.0,
                ".m_RRR": 5.07,
                ".r_Result": 4.67,
                ".r_Result 50% Candle SL": 4.67,
                ".m_Entry Candle": "Hammer",
                ".m_Zone Touch #": 2.0,
                ".m_Zone Origin": 1.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 16,
                "#": 17.0,
                ".m_RRR": 1.86,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 2.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 17,
                "#": 18.0,
                ".m_RRR": 3.87,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Hammer",
                ".m_Zone Touch #": 8.0,
                ".m_Zone Origin": 1.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 18,
                "#": 19.0,
                ".m_RRR": 1.97,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 19,
                "#": 20.0,
                ".m_RRR": 3.25,
                ".r_Result": 3.07,
                ".r_Result 50% Candle SL": 3.07,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "Yes",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 20,
                "#": 21.0,
                ".m_RRR": 4.15,
                ".r_Result": 0.0,
                ".r_Result 50% Candle SL": 0.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 2.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 21,
                "#": 22.0,
                ".m_RRR": 2.44,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 3.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 22,
                "#": 23.0,
                ".m_RRR": 3.9,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 4.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "Yes",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 23,
                "#": 24.0,
                ".m_RRR": 1.92,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 4.0,
                ".m_Zone Origin": 0.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            },
            {
                "index": 24,
                "#": 25.0,
                ".m_RRR": 2.66,
                ".r_Result": -1.0,
                ".r_Result 50% Candle SL": -1.0,
                ".m_Entry Candle": "Spinning",
                ".m_Zone Touch #": 4.0,
                ".m_Zone Origin": 1.0,
                ".m_Re-entry @ Other Level": "No",
                ".m_Fast Into Profits": "No",
                ".m_Trade @ Range Over": "No",
                ".m_Checked": "No",
                ".p": "AUDUSD"
            }
        ]
    },
    "notes": "",
    "author": {
        "$oid": "6175d1ad7d0ea08fbd85cc2c"
    },
    "documentId": {
        "$oid": "62bdb1e4acbe566f0779271d"
    },
    "date_created": {
        "$date": 1656626759825
    },
    "options": [
        {
            "id": ".m_RRR",
            "name": "RRR",
            "type": "number"
        },
        {
            "id": ".m_Entry Candle",
            "name": "Entry Candle",
            "type": "string",
            "values": [
                "Hammer",
                "Engulfing",
                "Spinning"
            ]
        },
        {
            "id": ".m_Zone Touch #",
            "name": "Zone Touch #",
            "type": "number"
        },
        {
            "id": ".m_Zone Origin",
            "name": "Zone Origin",
            "type": "number"
        },
        {
            "id": ".m_Re-entry @ Other Level",
            "name": "Re-entry @ Other Level",
            "type": "string",
            "values": [
                "No"
            ]
        },
        {
            "id": ".m_Fast Into Profits",
            "name": "Fast Into Profits",
            "type": "string",
            "values": [
                "No",
                "Yes"
            ]
        },
        {
            "id": ".m_Trade @ Range Over",
            "name": "Trade @ Range Over",
            "type": "string",
            "values": [
                "No",
                "Yes"
            ]
        },
        {
            "id": ".m_Checked",
            "name": "Checked",
            "type": "string",
            "values": [
                "No"
            ]
        },
        {
            "id": ".p",
            "name": "",
            "type": "string",
            "values": [
                "AUDUSD"
            ]
        }
    ]
}

如果您需要任何其他信息,請告訴我。

像 Apollo GraphGL 這樣的東西可能對你有用。 GraphQL 查詢可以按照您想要的確切形狀/模式拉入對象,因此它對您來說更有條理。 否則,您可能需要制作某種解析實用程序 function 以將響應 object 清理為新型 object。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM