| 62 | |
| 63 | ==== usePost |
| 64 | {{{#!javascript |
| 65 | import axios from "../../axios"; |
| 66 | |
| 67 | const useCreate = () => { |
| 68 | |
| 69 | const createEntity = async (url, entity, getData) => { |
| 70 | console.log(entity) |
| 71 | await axios |
| 72 | .post(url, null, { |
| 73 | params: entity, |
| 74 | }) |
| 75 | .then((res) => { |
| 76 | getData(prev => ++prev) |
| 77 | }) |
| 78 | .catch((err) => { |
| 79 | console.log(err); |
| 80 | }) |
| 81 | .finally(() => { |
| 82 | }); |
| 83 | } |
| 84 | |
| 85 | return { |
| 86 | createEntity |
| 87 | }; |
| 88 | |
| 89 | } |
| 90 | |
| 91 | export default useCreate; |
| 92 | }}} |
| 93 | Овој Hook го користиме за POST барања кон серверската страна. Од него постојат неколку модифицирани верзии во зависоност од тоа дали парамтерите се испраќаат во телото на барањето, како URL параметри или како променливи во патеката, но во основа се работи за иста имплементација. За разлика од useGet, тука, URL-то се испраќа како аргумент на функцијата, заедно со податоците кои треба да се испратат како параметри и состојбата на зависната променлива за која зборувавме во претходната компонент. Откако ќе се испрати POST, se враќа Promise со кој соодветно се справуваме на горенаведениот начин, со единствна разлика што во then сегментот, кога статусот означува успех, ја менуваме состојбата на зависната променлива за да се ререндерираат зависните компоненти. |
| 94 | ==== useFormData |
| 95 | {{{#!javascript |
| 96 | import { useState } from 'react'; |
| 97 | |
| 98 | const useFormData = (editData) => { |
| 99 | const [formData, setData] = useState({ ...editData }); |
| 100 | |
| 101 | const onFormChange = (e) => { |
| 102 | setData({ |
| 103 | ...formData, |
| 104 | [e.target.name]: e.target.value, |
| 105 | }); |
| 106 | }; |
| 107 | |
| 108 | const onCheckBoxChange = (e) => { |
| 109 | setData((prevData) => ({ |
| 110 | ...prevData, |
| 111 | [e.target.name]: !prevData[e.target.name], |
| 112 | })); |
| 113 | } |
| 114 | |
| 115 | const setFormData = (newData) => { |
| 116 | setData({...newData}); |
| 117 | } |
| 118 | return { |
| 119 | formData, |
| 120 | onFormChange, |
| 121 | onCheckBoxChange, |
| 122 | setFormData |
| 123 | }; |
| 124 | }; |
| 125 | |
| 126 | export default useFormData; |
| 127 | }}} |
| 128 | Во секој формулар каде што имаме кориснички влез потребно е да се справиме со него и да го проследиме до серверот во утврдената форма. Ова може да се постигне на стариот добар начин, со користење на концептот useState од React и посебна состојба за секое од input полињата. За да го поедноставиме ова, успешно имплементиравме општа функција за справување со корисничкиот влез која работи на следниот начин. Наместо посебни состојби за секое поле, чуваме состојба на еден објект, каде клучот е соодветно name атрибутот на полето, а вредноста е неговиот value. За процесирање на текстуалните полиња, при промена на вредноста одговорна е функцијата onFormChange, каде се менува состојбата на записот од објектот кој е засегнат според name атрибутот. Оваа функција се извршува на секој onChange настан испален од било која input компонента. onCheckBoxChange е ништо повеќе од специјална имплементација на onFormChange функцијата за checkbox input. Како и во претходно наведените Hook-и, и тука, референци до функциите и состојбите кои треба да бидат пристапени од другите компоненти се враќаат од функцијата. |