我需要在两个文件之间传递一个变量,该变量将存储从文件一(从API获取)获得的数据(用户ID),以便我可以将该变量用作文件二的端点中的参数.我已经使用redux工具包创建了全局状态,但我不知道如何使用Reducers(从第三个文件slice.js)将全局状态更新为从文件1获得的数据.事实上,我根本不知道如何做这件事.

文件一: 在该文件中,有从API动态呈现的按钮,当单击任何按钮时,该API将转到另一个页面.在另一个页面上,将根据获取的ID显示一些信息.

const [usersData, setUsersData] = userState([]);

useEffect({
fetchData()
});

export default function FileOne(){
return(
<>
  {usersData.map(userData => (
    <Link to='/fileTwo'>
       <button>{userData.id}</button>
    </Link>
  )}
</>
)
}

因此,我使用REDUX工具包创建了一个全局变量

Slice.js:

import { createSlice } from '@reduxjs/toolkit';

const initialState = {
    userId:0
    // Your global state properties here (e.g., count: 0, data: [])
};

 export const idSlice = createSlice({
    name: 'id',
    initialState,
    reducers: {
        getUserId(state){
          
        },
        // Reducer functions to update the state (e.g., increment(state) { ... })
    },
});
export const { getUserId} = idSlice.actions;
export default idSlice.reducer; 

我需要帮助的是我将如何更新UserID(全局状态) for each 用户的ID,这取决于在文件一中点击的按钮

推荐答案

如果您想要将选定的用户ID设置为状态,那么以下是我建议的更改/添加.

  • 添加新的setUserId操作以设置当前选定的userId
  • 在按钮的onClick处理程序中调度setUserId操作
  • 读取目标组件中的当前userId状态值

示例:

const initialState = {
  userId: null
  // Your global state properties here (e.g., count: 0, data: [])
};

export const idSlice = createSlice({
  name: 'id',
  initialState,
  reducers: {
    ....,
    setUserId: (state, action) => {
      state.userId = action.payload;
    },
  },
});

export const {
  ....,
  setUserId,
} = idSlice.actions;
import { useDispatch } from 'react-redux';
import { setUserId } from '../path/to/idSlice;'

export default function FileOne() {
  const dispatch = useDispatch();

  return usersData.map(userData => (
    <Link key={userData.id} to='/fileTwo'>
      <button onClick={() => dispatch(setUserId(userData.id))}>
        {userData.id}
      </button>
    </Link>
  );
}
import { useSelector } from 'react-redux';

const FileTwo = () => {
  const selectedUserId = useSelector(state => state.id.userId);

  ...
};

无论如何,这看起来像是相当短暂的状态,而且可能不需要存储在Reduxstore 中的任何东西.由于您使用的是Link组件(assumed React-Router library usage here)并实现导航操作,因此您可能只需要在导航操作中包括用户ID,即在URL路径中,即"/fileTwo/:userId"中,或者在路径状态中.

  • 在路由状态下超过userData.id:

    import { Link } from 'react-router-dom';
    
    export default function FileOne() {
      const dispatch = useDispatch();
    
      return usersData.map(userData => (
        <Link key={userData.id} to='/fileTwo' state={{ userId: userData.id }}>
          {userData.id}
        </Link>
      );
    }
    
    import { useLocation } from 'react-router-dom';
    
    const FileTwo = () => {
      const { state } = useLocation();
      const { userId } = state ?? {};
    
      ...
    };
    
  • URL路径段中超过userData.id:

    <Route
      path="/fileTwo/:userId?"
      element={<FileTwo />}
    </Route>
    
    import { Link } from 'react-router-dom';
    
    export default function FileOne() {
      const dispatch = useDispatch();
    
      return usersData.map(userData => (
        <Link key={userData.id} to={`/fileTwo/${userData.id}`}>
          {userData.id}
        </Link>
      );
    }
    
    import { useParams } from 'react-router-dom';
    
    const FileTwo = () => {
      const { userId } = useParams();
    
      ...
    };
    

Reactjs相关问答推荐

LocalStore未存储正确的数据

Reaction Ploly:如何在多个子情节中共享zoom 状态

NextJS如何正确保存添加到购物车中的产品会话

在新屏幕上显示照片时出现问题-react

useState导致对函数的无休止调用

无法在react 中向表中添加行

虽然通过了身份认证,但并没有导航到请求的页面

react-router v6 中的 BrowserRouter 和 createBrowserRouter 有什么区别?我可以在不使用数据 API 的情况下使用 createBrowserRouter 吗?

如何在 React Native 中更新跨屏幕呈现的上下文状态变量?

Redux,状态未定义

如何使图标适合 react-bootstrap 中的行元素

从 API 中提取映射数组后出现重复元素

如何从一组对象映射 MUI 5 图标并更改其 colored颜色 ?

需要帮助在 document.queryselector 的 nextjs 页面上插入 useEffect 状态

在 redux 工具包中使用 dispatch 发送多个操作

加密 Django Rest Framework API 响应 + 解密响应应用程序中的响应

我在使用 Elements of stripe 时使用 React router v6

ReactJS:按钮启用禁用更改 colored颜色

如何跟踪 dexie UseLiveQuery 是否完成

如何在 React x 中返回组件?