Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to trigger GET after POST in React so new item would show without reloading page

I have App component where the list of items is shown, and ModalForm where you can add a new one. But when I’m adding new item I have to reload the page to see it in my list. I want to trigger somehow my GET method after I execute my POST method.

**App.js**
const App = () => {
    let books = useAxiosGet(API_URL)
    //some code

    return (
        //some code
        <ModalForm />
    );
}

    **ModalForm.js**
    const ModalForm = () = > {
        //some logic for opening modal form

        function submit(e) {
            e.preventDefault();
            axios.post(API_URL, {
                name: data.name,
                description: data.description,
                count: data.count,
                imageURL: data.imageURL,
                price: data.price
            })
            .then(res => {
                // document.location.reload();
                // here I want to trigger GET
                console.log(res.data);
            })
            .catch((err) => {
                console.log(err);
            })
        setData({
            name: "",
            description: "",
            count: "",
            imageURL: "",
            price: ""
        })
    }

    function handle(e){
        const newData={...data}
        newData[e.target.id] = e.target.value
        setData(newData)
        console.log(newData)
    }

    return (//some code);
}

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

You should use React State to store your books.

https://ar.reactjs.org/docs/state-and-lifecycle.html

  1. Make a state for books
const App = () => {
    // Books storage.
    const [books, setBooks] = useState([]);
}
  1. Make a function that loads the books.
const App = () => {
    // Books storage.
    const [books, setBooks] = useState([]);

    // Load books
    const loadBooks = () => {
        const response =  useAxiosGet(API_URL);
        setBooks(response );
    }
}
  1. Loads the books when component mound using useEffect hook.
    https://ar.reactjs.org/docs/hooks-effect.html
const App = () => {
    // Books storage.
    const [books, setBooks] = useState([]);

    // Load books
    const loadBooks = () => {
        const response =  useAxiosGet(API_URL);
        setBooks(response );
    }

    // Load books when component mount.
    useEffect(loadBooks, [])
}
  1. In your submit function, after the submission success, you can just call loadBooks again.
const submit = () => {
    ...
    .then(() => {
        loadBooks();
     })
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading