Reputation: 323
UpdatedMemory.jsx
import React, { useState, useEffect } from "react";
import { Form, Button } from "react-bootstrap";
import ReactFileBas64 from "react-file-base64";
import { useHistory } from "react-router-dom";
import { fetchSingleMemory } from "../axios";
import { useDispatch } from "react-redux";
import { updateMemory } from "../features/memoriesSlice";
const UpdateMemory = ({ id }) => {
const history = useHistory();
const dispatch = useDispatch();
const [memoryData, SetMemoryData] = useState({
title: "",
content: "",
creator: "",
image: "",
});
console.log(memoryData);
useEffect(() => {
const getMemory = async (id) => {
const res = await fetchSingleMemory(id);
const { title, content, creator, image } = res.data;
SetMemoryData({
title,
content,
creator,
image,
});
};
getMemory(id);
}, [id]);
return(
<Form
onSubmit={(e) => {
e.preventDefault();
dispatch(updateMemory(id, memoryData));
history.push("/");
}}
>
<Form.Group>
<h1>Create a memory</h1>
</Form.Group>
...
)
export default UpdateMemory;
memoriesSlice.js
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import { fetchMemories, API } from "../axios";
export const getMemories = createAsyncThunk("memories/get", async () => {
const { data } = await fetchMemories();
return data;
});
export const addMemory = createAsyncThunk(
"memories/post",
async (newMemory) => {
const { data } = await API.post("/memories", newMemory);
return data;
}
);
export const deleteMemory = createAsyncThunk("memories/delete", async (id) => {
const { data } = await API.delete(`/memories/${id}`);
return data;
});
export const updateMemory = createAsyncThunk("memories/update", async (id, content) => {
console.log("id : ", id)
console.log("content : ", content)
const { data } = await API.put(`/memories/${id}`, content)
return data
})
axios.js
import axios from "axios";
export const API = axios.create({
baseURL: "http://localhost:5000",
});
// Create a memory
export const createMemory = async (newMemory) => {
await API.post("/memories", newMemory);
};
// Get all memories
export const fetchMemories = () => API.get("/memories");
// Get selected memory
export const fetchSingleMemory = async (id) => await API.get(`/memories/${id}`)
// Delete selected memory
export const deleteMemory = (id) => API.delete(`/memories/${id}`);
// Update selected memory
export const updateMemory = (id, content) => API.put(`/memories/${id}`, content)
Hi all. Firstly of all my rest of my createAsyncThunk functions((getMemories, addMemory, deleteMemory) work well. But when I try to get value of 2nd parameter from updateMemory
function console.log("content : ", content)
display content : {extra: undefined, requestId: "mtUwsnm7jiaTURnpKV3W_", signal: AbortSignal, dispatch: ƒ, getState: ƒ, …}
so it doesnt send me memoryData
.Why dispatch(updateMemory(id, memoryData))
doesnt send me 2nd parameter properly?
Upvotes: 0
Views: 735
Reputation: 323
I solved it guys. When I use dispatch(updateMemory({id, memoryData}))
instead of dispatch(updateMemory(id, memoryData))
it works properly.
Upvotes: 1