import { useState, useEffect } from "react"; import axios from "axios"; const useField = (type) => { const [value, setValue] = useState(""); const onChange = (event) => { setValue(event.target.value); }; const reset = () => { setValue(""); }; return { type, value, onChange, reset, }; }; const useResource = (baseUrl) => { const [resources, setResources] = useState([]); useEffect(() => { const getAll = async () => { const response = await axios.get(baseUrl); setResources(response.data); }; getAll(); }, [baseUrl]); const create = async (resource) => { const response = await axios.post(baseUrl, resource); setResources(resources.concat(response.data)); }; const service = { create, }; return [resources, service]; }; const App = () => { const { reset: resetContent, ...content } = useField("text"); const { reset: resetName, ...name } = useField("text"); const { reset: resetNumber, ...number } = useField("text"); const [notes, noteService] = useResource("http://localhost:3005/notes"); const [persons, personService] = useResource("http://localhost:3005/persons"); const handleNoteSubmit = async (event) => { event.preventDefault(); const newNote = { content: content.value }; await noteService.create(newNote); resetContent(); }; const handlePersonSubmit = async (event) => { event.preventDefault(); const newPerson = { name: name.value, number: number.value, id: persons.length + 1, }; await personService.create(newPerson); resetName(); resetNumber(); }; return (

notes

{notes.map((n) => (

{n.content}

))}

persons

name
number
{persons.map((n) => (

{n.name} {n.number}

))}
); }; export default App;