我收到有关改变状态的错误消息,但 Redux Toolkit 的目的是改变状态,所以我很困惑......
该错误来自,我将新电子邮件添加到调用usingaddNewEmail的数组中,第二个参数是常规字符串。prevEmailsuseSelector
import { createSlice } from "@reduxjs/toolkit";
import { AppThunk } from "./store";
const initialState = {
emails: [],
};
export const emailSlice = createSlice({
name: "email",
initialState,
reducers: {
setEmails: (state, action: any) => {
state.emails = action.payload;
},
},
});
export const { setEmails } = emailSlice.actions;
export const addNewEmail = (prevEmails: any, email: string): AppThunk => (
dispatch
) => {
const allEmails = prevEmails.push(email);
dispatch(setEmails(allEmails));
};
export default …Run Code Online (Sandbox Code Playgroud) 你们能帮我解决这个问题吗?我正在映射此emails状态,但是当我从数组中删除电子邮件时,handleDelete不会map重新渲染。当我console.log(emails)正确时,电子邮件就会被正确删除。
import { TextField, Chip, Avatar } from "@material-ui/core";
import React, { useState } from "react";
import "./Email.css";
export default function Email() {
const [value, setValue] = useState<string>();
const [emails, setEmails] = useState<string[]>([]);
function onTextChange(e: any) {
setValue(e.target.value.replace(" ", ""));
if (value?.includes(",")) {
let separated = e.target.value.split(",");
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
const newEmails = separated.filter((val: any) => re.test(val));
if (newEmails[0] !== undefined) {
emails.push(newEmails[0]);
setEmails(emails);
console.log(emails);
}
setValue("");
}
}
function handleDelete(email: …Run Code Online (Sandbox Code Playgroud) 似乎设置 Next.js 和 MUI 的“方法”是删除服务器端样式,所以我在 _app.tsx 中完成了它
import '../styles/globals.css';
import type { AppProps } from 'next/app';
import { useEffect } from 'react';
function MyApp({ Component, pageProps }: AppProps) {
useEffect(() => {
const jssStyles = document.querySelector('#jss-server-side');
if (jssStyles) {
jssStyles.parentElement?.removeChild(jssStyles);
}
}, []);
return <Component {...pageProps} />;
}
export default MyApp;
Run Code Online (Sandbox Code Playgroud)
也在 _document.tsx 中做到了
import { ServerStyleSheets } from '@mui/styles';
import Document, { Head, Html, Main, NextScript } from 'next/document';
import React from 'react';
export default class MyDocument extends Document …Run Code Online (Sandbox Code Playgroud)