Post

๐ŸŒŒ React ์ž…๋ฌธ โ…ฉ - ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

๐ŸŒŒ React ์ž…๋ฌธ โ…ฉ - ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

๐Ÿ“˜ ใ€Ž์†Œํ”Œ์˜ ์ฒ˜์Œ ๋งŒ๋‚œ ๋ฆฌ์•กํŠธใ€๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์ด๋ž€?

  • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ Œ๋”๋ง์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฑธ ์˜๋ฏธํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ ์กฐ๊ฑด์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋ณดํ†ต ์ผ์ปซ๋Š” ์กฐ๊ฑด๋ฌธ์„ ์˜๋ฏธํ•œ๋‹ค.

Inline ์กฐ๊ฑด์ด๋ž€?

์กฐ๊ฑด๋ฌธ์„ ์ฝ”๋“œ ์•ˆ์— ์ง‘์–ด๋„ฃ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

โœ… Inline-if

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Mailbox(props) {
    const unreadMessages = props.unreadMessages;
    
    return (
        <div>
            <h1>์•ˆ๋…•ํ•˜์„ธ์š”!</h1>
            {unreadMessages.length > 0 &&
            	<h2>
                    ํ˜„์žฌ {unreadMessages.length}๊ฐœ์˜ ์ฝ์ง€ ์•Š์€ ๋ฉ”์„ธ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
                </h2>
            }
        </div>
    );
}
  • if๋ฌธ์„ ์ฝ”๋“œ์— ์ง์ ‘ ๋„ฃ์–ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์‹ค์ œ๋กœ๋Š” if ์กฐ๊ฑด๋ฌธ์ด ์•„๋‹Œ && ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • Java๋ž‘ ๋™์ผํ•˜๊ฒŒ ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด๋ฌธ์ด true๋ฉด ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด๋ฌธ์„ ๊ฒ€์‚ฌํ•˜๊ณ , false๋ผ๋ฉด ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด๋ฅผ ๋‹จ์ถ• ํ‰๊ฐ€๋ผ๊ณ  ํ•œ๋‹ค.ย 

โœ… Inline-if-else

1
2
3
4
5
6
7
function UserStatus(props) {
    return (
        <div>
            ์ด ์‚ฌ์šฉ์ž๋Š” ํ˜„์žฌ <b>{props.isLoggedIn ? '๋กœ๊ทธ์ธ' : '๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์€'}</b> ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
        </div>
    );
}

Component ๋ Œ๋”๋ง ๋ง‰๊ธฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// WarningBanner.jsx
function WarningBanner(props) {
    if (!props.warning) {
    	return null;
    }
    
    return (
    	<div>๊ฒฝ๊ณ !</div>
    );
}

// MainPage.jsx 
function MainPage(props) {
    const [showWarning, setShowWarning] = useState(false);
    
    const handleToggleClick = () => {
    	setShowWarning(prevShowWarning => !prevShowWarning);
    }
    
    return (
    	<div>
            <WarningBanner warning={showWarning}/>
            <button onClick={handleToggleClick}>
            	{showWarning ? '๊ฐ์ถ”๊ธฐ' : '๋ณด์ด๊ธฐ'}
            </button>
        </div>
    );
}
  • MainPage.jsx์—์„œ WarningBanner.jsx๋ฅผ Component๋กœ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, warning ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.
  • false๋ฅผ warning ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋‹ด์•„ ์ „๋‹ฌํ•˜๋ฉด Component๋Š” null์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๋ Œ๋”๋ง์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ฐธ๊ณ ๋กœ Class Component์˜ render() ํ•จ์ˆ˜์—์„œ null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ Component ์ƒ๋ช…์ฃผ๊ธฐ ํ•จ์ˆ˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— componentDidUpdate() ํ•จ์ˆ˜๋Š” ์—ฌ์ „ํžˆ ํ˜ธ์ถœ๋œ๋‹ค.

์‹ค์Šต

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
return (
    <Box sx=>
        <Typography variant="h6" sx=>์›Œํฌ์ŠคํŽ˜์ด์Šค</Typography>
        <Divider sx= />
        {isCreating || isEditing ? (
            <CreateWorkspace
                onCancel={handleCancel}
                onWorkspaceCreated={handleWorkspaceCreated}
                onWorkspaceUpdated={handleWorkspaceUpdated}
                workspace={selectedWorkspace}
                isEditing={isEditing}
            />
        ) : (
            <>
                {isAdding ? (
                    <ManageJoin
                        onCancel={handleCancelAdd}
                        workspace={selectedWorkspace.id}
                    />
                ) : (
                    <>
                        <ReadWorkspace
                            workspaceList={workspaceList}
                            onCreateWorkspace={handleCreateWorkspace}
                            onEditWorkspace={handleEditWorkspace}
                            onAddMember={handleAddMember}
                            handleDeleteButtonClick={handleDeleteButtonClick}
                            workspace={selectedWorkspace}
                            setWorkspace={setSelectedWorkspace}
                            memberList={memberList}
                            page={page}
                        />
                        {workspaceList.length > 0 && (
                            <>
                                <Card variant="outlined" sx=>
                                    <Typography variant="body2">
                                        <Chip label="์„ค๋ช…" color="primary" variant="outlined" />
                                        {' '}{selectedWorkspace?.description}
                                    </Typography>
                                </Card>
                                <ConfirmDialog
                                    open={isDialogOpen}
                                    onConfirm={handleWorkspaceDeleted}
                                    onClose={handleCancelDelete}
                                    title={'์›Œํฌ์ŠคํŽ˜์ด์Šค ์‚ญ์ œ'}
                                    content={'ํ•ด๋‹น ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์ •๋ง ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?\n์‚ญ์ œ๋œ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋Š” ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.'}
                                />
                                <MemberTable
                                    memberList={memberList}
                                    page={page}
                                    workspace={selectedWorkspace}
                                    onPageChange={handlePageChange}
                                    onChange={readMemberListInWorkspace}
                                />
                            </>
                        )}
                    </>
                )}
            </>
        )}
    </Box>
);
  • ์ฑ…์—์„œ ์ œ๊ณตํ•˜๋Š” ์‹ค์Šต ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ํ† ์ด ํ”„๋กœ์ ํŠธ v1.0.0 ์ฝ”๋“œ์ด๋‹ค.
  • ๋งŒ์•ฝ isCreating == true || isEditing == true๋ฉด ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋“ฑ๋ก ๋ฐ ์ˆ˜์ • ํ™”๋ฉด์„ ๋ Œ๋”๋ง ํ•œ๋‹ค.
  • ์œ„์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๊ณ  isAdding == true๋ฉด ๋ฉค๋ฒ„ ์ถ”๊ฐ€ ํ™”๋ฉด์„ ๋ Œ๋”๋ง ํ•œ๋‹ค.
  • ๋‘ ์กฐ๊ฑด ๋ชจ๋‘ ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฉ”์ธ ํ™”๋ฉด์„ ๋ Œ๋”๋ง ํ•œ๋‹ค.

โœ… ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฉ”์ธ ํ™”๋ฉด

โœ… ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋“ฑ๋ก ๋ฐ ์ˆ˜์ • ํ™”๋ฉด

โœ… ๋ฉค๋ฒ„ ์ถ”๊ฐ€ ํ™”๋ฉด

ํšŒ๊ณ 

  • ์ด๋ฒˆ ์‹ค์Šต์€ ์ฑ…์—์„œ ์ œ๊ณตํ•œ ์‹ค์Šต ๋‚ด์šฉ์ด ์•„๋‹Œ ํ•„์ž์˜ ํ† ์ด ํ”„๋กœ์ ํŠธ v1.0.0 ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ์ธ๋ฐ, Component ๋ถ„๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์•ˆ ๋˜์–ด ๊ต‰์žฅํžˆ ๋ณต์žกํ•œ ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋‹ค.
  • ํ•ด๋‹น ๋ฒ„์ „์€ ํ”„๋กœ์ ํŠธ ์ž์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์˜ˆ์ •์ธ๋ฐ, ๋‹ค์Œ์—๋Š” ์กฐ๊ธˆ ๋” ์‹ ๊ฒฝ ์จ์„œ ์ž‘์„ฑํ•ด๋ด์•ผ๊ฒ ๋‹ค.
This post is licensed under CC BY 4.0 by the author.