亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Redux 數據持久化 Material-UI 選擇

使用 Redux 數據持久化 Material-UI 選擇

慕容708150 2021-11-18 16:37:57
我正在嘗試使用 Redux 中的數據實現 Material-UI Select 組件,以允許選擇在刷新時保持不變。我在 Redux 中有兩個數據sourceTags數組:數組,它是我的可點擊菜單選項列表,以及我的selectedTags數組,其中包含選定的選項(用戶點擊的選項)。Material-UI 組件的 api 在這里。該組件如下所示:import React, { useEffect, useState } from 'react';import { Select, Input, MenuItem } from "@material-ui/core";import { useDispatch, useSelector } from "react-redux";import { setTags } from "../actions/search";const MultiChipSelect = ({ source }) => {    const dispatch = useDispatch();    const selectedTags = useSelector(state => state.search.tags);    const sourceTags = useSelector(state => state.settings[source].tags);    const handleTagClick = async (e) => {        dispatch(setTags(e.target.value)); // Sets my searchTags list in Redux.        // The e.target.value is an array of objects, or an empty array.    };    return (        <Select        multiple        value={selectedTags}        onChange={handleTagClick}        input={<Input id="select-multiple" />}        >        {sourceTags.map(val => (            <MenuItem key={val._id} value={val}>            {val.data}            </MenuItem>        ))}        </Select>    );}export default MultiChipSelect;該組件至少部分工作。這是我進行選擇時的樣子:redux 商店也正在正確更新。很高興分享動作生成器和減速器,但這不是問題。問題是,當我刷新頁面時,selectedTags 數組沒有顯示在組件中。對象確實出現在選擇組件內,但沒有出現:我如何重構這個 Material-UI 組件以正確地從我的 Redux 存儲中提取數據,并在刷新中保留顯示的選擇,而不是依賴于沒有的useState鉤子,如示例所示?對于上下文,這是使用useState鉤子的樣子。請記住,這不會在刷新之間保留選擇:import React, { useState } from 'react';import { Select, Input, MenuItem } from "@material-ui/core";import { useSelector } from "react-redux";const MultiChipSelect = ({ source }) => {    const sourceTags = useSelector(state => state.settings[source].tags);    const [tags, setTags] = useState([]);    const handleTagClick = async (e) => {        setTags(e.target.value); // Sets my tags list.    };
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

弄清楚了。


事實證明,該組件實際上正確地接收了信息,但它沒有顯示它,因為它使用了默認的渲染功能。


我需要用一個可以使用對象數據的函數來替換渲染函數。固定組件如下所示:


import React, { useEffect, useState } from 'react';

import { Select, Input, MenuItem } from "@material-ui/core";

import { useDispatch, useSelector } from "react-redux";

import { setTags } from "../actions/search";


const MultiChipSelect = ({ source }) => {


    const dispatch = useDispatch();

    const selectedTags = useSelector(state => state.search.tags);

    const sourceTags = useSelector(state => state.settings[source].tags);


    const handleTagClick = async (e) => {

        dispatch(setTags(e.target.value));

    };


    return (

        <Select

        multiple

        value={selectedTags}

        onChange={handleTagClick}

        input={<Input id="select-multiple" />}

        // renderValue={selected => ( // This function is necessary when using objects, because the 'label' value should display the value.data value, not just the object. This is necessary because I'm using objects instead of strings.

        //    <div>

        //      {selected.map(value => (

        //        <Chip key={value._id} label={value.data}/>

        //      ))}

        //    </div>

        //  )}

        >

        >

        {sourceTags.map(val => (

            <MenuItem key={val._id} value={val}>

            {val.data}

            </MenuItem>

        ))}

        </Select>

    );

}


export default MultiChipSelect;



查看完整回答
反對 回復 2021-11-18
  • 1 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號