#node.js #reactjs #typescript #express
Вопрос:
Я пытаюсь построить систему POS, которая взаимодействует с кухней. Прямо сейчас я пытаюсь импортировать редуктор на свой экспресс-сервер, но, похоже, я не могу импортировать его ни как функцию, ни как модуль. Я использую React и useContext с useReducer и хочу иметь центральную нервную систему для управления всеми действиями по отправке. Вот влияющие свернутые страницы, если это поможет:
INDEX.JS
const app = require('express')();
const server = require('http').createServer(app);
const chooseSystem = require('./../kassa/controller/login/login.tsx');
import {reducer} from './src/utils/reducer'
const io = require("socket.io")(server, {
cors: {
origin: "http://192.168.0.25:8100",
methods: ["GET", "POST"]
}
});
io.on('connection', (socket) =>
{
// Landing page, user chooses system to log in to POS or kitchen
socket.on('CHOOSESYSTEM', dispatchFunction => {
chooseSystem.chooseSystem(dispatchFunction);
});
});
server.listen(3000, () => { console.log("Listening on 3000");});
/////////////////////////////////////////////////////////////////////////////
REDUCER.TSX
import React from "react";
import { GlobalInitContextProps, GlobalStateProps } from "./interfaces";
const reducer = (state = initGlobalState, action: any) => {
switch (action.type) {
case "LOG_IN_TO_POS":
return {
...state,
isLoggedIn: {
inSystem: true,
inPOS: true,
},
};
case "LOG_IN_TO_KITCHEN":
return {
...state,
isLoggedIn: {
inSystem: true,
inPOS: false,
},
};
case "GO_TO":
return {
...state,
...action.payload,
};
default:
return new Error("Something went wrong with the reducer");
}
};
// Export
export {reducer};
Я попытался экспортировать его в виде модуля следующим образом: module.exports.reducer = редуктор и использовать require(«) в моем index.js но это не работает. Модуль не найден. Не обращайте внимания на функциональность, так как она не имеет смысла без остальных страниц
Это моя структура проекта:
- KASSA
- INDEX.JS
- Src
- УТИЛИ
- редуктор
- УТИЛИ
Комментарии:
1. Почему вы хотите использовать редуктор React в бэкэнде?
2. Я не знаю. Есть ли лучший способ справиться с глобальным состоянием или манипулировать им ?
Ответ №1:
попробуйте экспортировать редуктор по умолчанию
REDUCER.TSX
import React from "react";
import { GlobalInitContextProps, GlobalStateProps } from "./interfaces";
export default (state = initGlobalState, action: any) => {
switch (action.type) {
case "LOG_IN_TO_POS":
return {
...state,
isLoggedIn: {
inSystem: true,
inPOS: true,
},
};
case "LOG_IN_TO_KITCHEN":
return {
...state,
isLoggedIn: {
inSystem: true,
inPOS: false,
},
};
case "GO_TO":
return {
...state,
...action.payload,
};
default:
return new Error("Something went wrong with the reducer");
}
};
И импорт его, как
import reducer from './src/utils/reducer'
Комментарии:
1. Спасибо вам за ответ. Я попробовал ваш метод, но, к сожалению, я все еще получаю ошибку: Синтаксическая ошибка: Неожиданный идентификатор. «импорт редуктора из». /src/utils/редуктор». неожиданный идентификатор указывает на слово редуктор сразу после «импорт».