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.