0

Someone once answered a question of mine and used ?? Instead of one, so I was curious of what is the difference. I think it may be related to the useEffect hook or maybe react hooks and dependencies in general. I have included the code snippet below.

const Blog: React.FunctionComponent = () => {
// state to store data returned by async call. (originally set to null).
const [posts, setPosts] = React.useState(null);

// use an effect to load async data.
// the effect only runs on component load and every time the data in
// the dependency array changes "[setPosts]" (reference comparison).
React.useEffect(() => {
    // Create funtion to run async logic to load posts.
    const getPosts = () => {
        // load posts
        db.collection("Posts").get().then(snapshot => {
            // map loaded posts to an array of easy to manage objects.
            const loadedPosts = snapshot.docs.map(docs => {
                return {
                    name: docs.data().postName,
                    createdAt: docs.data().createdAt,
                    content: docs.data().postContent,
                }
            });

            // store loaded posts in state.
            setPosts(loadedPosts ?? []);
        });
    };

    // run async function created above.
    getPosts();
}, [setPosts])

// posts will remain null until the async function has loaded data.
// you can manually track loading in a separate state if required.
if (posts === null) {
    // Show loading view while loading.
    return (
        <div>
            Loading Posts...
        </div>
    );
}

// map out posts view after posts have been loaded.
return (
    <div>
        {posts.map(post => (
            <div>
                <div>{post.postName}</div>
                <div>{post.createdAt}</div>
                <div>{post.content}</div>
            </div>
        ))}
    </div>
);

};

Ahmad Shaker
  • 5
  • 2
  • 2
  • 2
    ?? is the [Nullish coalescing operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator), and ? is part of the [Conditional (ternary) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) – Bravo Jul 09 '21 at 03:24

0 Answers0