【问题标题】:react-dom.production.min.js:216 "TypeError: s.map is not a function"react-dom.production.min.js:216 "TypeError: s.map 不是函数"
【发布时间】:2021-08-09 23:56:39
【问题描述】:

由于此代码,我有以下错误react-dom.production.min.js:216 "TypeError: s.map is not a function

sidebar.jsx

const [cats, setCats] = useState([]);

  useEffect(() => {
    const getCats = async () => {
      const res = await axios.get("/categories");
      setCats(res.data);
    };
    getCats();
  }, []);

...

<span className="sidebarTitle">CATEGORIES</span>
        <ul className="sidebarList">
          {cats.map((c) => (
            <Link to={`/?cat=${c.name}`} className="link">
              <li className="sidebarListItem">{c.name}</li>
            </Link>
          ))}
        </ul>

我想在使用 MERN 制作的网站的侧边栏中显示这些类别。

重现它的代码:

index.js(在服务器部分)

const mongoose = require("mongoose");
const authRoute = require("./routes/auth");
const userRoute = require("./routes/users");
const postRoute = require("./routes/posts");
const categoryRoute = require("./routes/categories");
const multer = require("multer");
const path = require("path");

dotenv.config();
app.use(express.json());
app.use("/images", express.static(path.join(__dirname, "/images")));

mongoose
  .connect(process.env.MONGO_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: true
  })
  .then(console.log("Connected to MongoDB"))
  .catch((err) => console.log(err));
  

app.use("/api/categories", categoryRoute);

app.listen("3000", () => {
  console.log("Backend is running.");
});

routes/categories.js

const router = require("express").Router();
const Category = require("../models/Category");

router.post("/", async (req, res) => {
  const newCat = new Category(req.body);
  try {
    const savedCat = await newCat.save();
    res.status(200).json(savedCat);
  } catch (err) {
    res.status(500).json(err);
  }
});

router.get("/", async (req, res) => {
    try {
      const cats = await Category.find();
      res.status(200).json(cats);
    } catch (err) {
      res.status(500).json(err);
    }
  });

module.exports = router;

models/Category.js

const mongoose = require("mongoose");

const CategorySchema = new mongoose.Schema(
  {
    name: {
      type: String,
      required: true,
    },
  },
  { timestamps: true }
);

module.exports = mongoose.model("Category", CategorySchema);

我现在想将所有内容传递给前端 (REACT) 以将其显示在屏幕上。前端对应的代码命名为sidebar.jsx(我把代码放在上面一点)。

你有什么办法改正吗?

【问题讨论】:

  • 我猜res.data 不是一个数组,但是没有minimal reproducible example 就很难说。
  • 代码中s.map在哪里?
  • 我没有s.map,只有cats.map。该错误对应于我的cats.map
  • 您应该尝试在调试模式下运行您的代码,这样您才能看到实际的变量名称。甚至在那之前,添加一些console.log,这样你就可以知道发生了什么。

标签: reactjs express mern


【解决方案1】:

从 api 获取的数据不是数组格式。请检查您的 api 是否返回数组。

【讨论】:

  • 是的,我昨天看到一个 console.log 数组是空的,这解释了错误。不幸的是,我无法理解为什么 API 没有返回正确的值。你知道用 mongoose 连接数据库吗?
猜你喜欢
  • 2023-02-10
  • 2021-04-15
  • 2022-01-27
  • 2020-08-18
  • 2020-08-25
  • 1970-01-01
  • 2018-05-01
  • 2021-05-01
  • 2017-06-24
相关资源
最近更新 更多