Reactjs 在运行时创建redux导出

Reactjs 在运行时创建redux导出,reactjs,react-native,redux,Reactjs,React Native,Redux,redux初学者工具包使用redux进行清理。 我想进一步改进它。所以我试着这样做: import { createSlice } from 'redux-starter-kit' export default knife = function(sliceName, initialState, actions) { return function() { eval(`export const #{sliceName} = createSlice(slice: sliceName,

redux初学者工具包
使用redux进行清理。 我想进一步改进它。所以我试着这样做:

import { createSlice } from 'redux-starter-kit'

export default knife = function(sliceName, initialState, actions) {
  return function() {
    eval(`export const #{sliceName} = createSlice(slice: sliceName,
      initialState: initialState, reducers: {})`)
  }
}
目标是定制减速器:。。部分根据我的应用程序需要(基于actions变量的动态API调用)。这是重构的目标,但不是这个问题的目标

我希望做的是打电话,比如在我的
restaurantslice.js

knife('restaurants', {allRestaurants: []}, {'addRestaurant', '/restaurants', 'POST", (state, action) => {...}})()
希望它能对整个声明进行评估,使其等同于这样做

export const restaurantSlice = createSlice(
'slice': 'restaurant',
...
当我运行这段代码时,我得到一个错误“导出声明只能在模块顶部进行”

我如何才能做到这一点?

请不要这样做:(

  • 使用
    eval()
  • 根据该错误,
    export
    关键字只能在文件的顶层静态使用
  • 这样的元编程只会给你带来问题

从“手工”写出实际代码开始。如果你真的看到多个文件中重复的一堆,那么你可以考虑尝试进一步抽象它。(见Sundi-Mez的帖子有一些有力的论点,反对过早地抽象。) Redux文档提供了可重用的功能。您可以编写可重用函数并将其包含在多个切片中,或者可能有一个“高阶切片”函数,该函数接受一些选项和调用

createSlice()
,但该函数中的实际代码需要是代码,而不是传递给
eval()
的字符串

示例可能如下所示:

const createFetchSlice=(切片名称,端点)=>{
常量初始状态={
加载:false,
数据:[],
};
const capitalizedName=大写(切片名称);
const startedName=`create${capitaledName}start`;
const successName=`create${capitaledName}Success`'
const slice=createSlice({
切片:切片名称,
初始状态,
减速器:{
[startedName](状态、操作){
state.loading=true;
},
[成功名称](状态、操作){
state.data=action.payload;
state.loading=false;
},           
}
});
const createItem=(值)=>异步调度=>{
const{[startedName]:fetchStarted[successName]:fetchSuccess}=slice.actions;
分派(fetchStarted());
const response=await myAjaxLib.post(端点,值);
调度(fetchSuccess(response.data));
}
slice.actions.createItem=createItem;
返回片;
}

只是好奇的求值(
export const{sliceName}=createSlice(slice:sliceName,initialState:initialState,reducer:{})
)。为什么英镑符号“#”不是美元“$”不幸的是,同样的问题。我认为我在过度设计这个问题,我真正需要做的是导出CreateSicle结果。我仍然很想知道我是否可以这样做动态导出单独给出我的实际答案后,我很好奇:关于RSK,你觉得到目前为止不简洁吗?你想在
crea之上抽象什么teSlice
?API调用和成功处理。我必须在reducer中定义CreateRestaurantAccess=(状态,操作),然后在createSlice之后,我必须常量{CreateRestaurantAccess}=restaurantSlice.actions导出常量addRestaurant=(vars)=>{return dispatch=>{return apiPost(..不同意第3点:)但是我会接受#2和redux链接,谢谢用一个例子来说明我的答案。是的-与我现在正在使用的非常相似。谢谢你的参考!当我第一次查看redux初学者工具包网站时,他们没有任何好的异步示例,所以我不知道如何查看合并还原器部分。我最近添加了。合并的概念不同方式的g减速机是纯Redux。