useEffect Hook#
The useEffect
hook is called on specific external events.
For example the useEffect
hook is called after the component is rendered.
We can use this hook to do additional calls.
In our case we want to fetch the initial data from the backend.
29 useEffect(() => {
30 dispatch(getFaqItems());
31 }, [dispatch]);
The getFaqItems
method is called using the dispatch hook.
The full Faq
component will now look like this:
1import { useState, useEffect } from "react";
2import { useSelector, useDispatch } from "react-redux";
3
4import { addFaqItem, getFaqItems } from "../actions";
5import FaqItem from "./FaqItem";
6
7function Faq() {
8 const faqList = useSelector((state) => state.faq);
9 const dispatch = useDispatch();
10
11 const [question, setQuestion] = useState("");
12 const [answer, setAnswer] = useState("");
13
14 const onChangeAnswer = (e) => {
15 setAnswer(e.target.value);
16 };
17
18 const onChangeQuestion = (e) => {
19 setQuestion(e.target.value);
20 };
21
22 const onSubmit = (e) => {
23 e.preventDefault();
24 setQuestion("");
25 dispatch(addFaqItem(question, answer));
26 setAnswer("");
27 };
28
29 useEffect(() => {
30 dispatch(getFaqItems());
31 }, [dispatch]);
32
33 return (
34 <div>
35 <ul>
36 {faqList.map((item, index) => (
37 <FaqItem
38 key={index}
39 question={item.question}
40 answer={item.answer}
41 index={index}
42 />
43 ))}
44 </ul>
45 <form onSubmit={onSubmit}>
46 <label>
47 Question:{" "}
48 <input
49 name="question"
50 type="text"
51 value={question}
52 onChange={onChangeQuestion}
53 />
54 </label>
55 <label>
56 Answer:{" "}
57 <textarea name="answer" value={answer} onChange={onChangeAnswer} />
58 </label>
59 <input type="submit" value="Add" />
60 </form>
61 </div>
62 );
63}
64
65export default Faq;