일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- REACT
- 안드로이드
- 백준
- 나머지가1
- 코딩테스트연습
- Fullcalendar
- 부트스트랩
- Android
- 프로그래머스
- php
- Programmers
- bootstrap
- 연습문제
- MSSQL
- 월간코드챌린지시즌3
- level1
- androidstudio
- 월간코드챌린지시즌2
- java
- 모달
- 스킬체크
- SimpleDateFormat
- modal
- AJAX
- bootstrapModal
- 동적웹페이지
- Node
- 코딩테스트
- Summer/WinterCoding
- 스킬체크테스트
- Today
- Total
개발하는 고양이 오이
9. [React] React로 FullCalendar 사용5 - Events 별로 다른 색상 주기 본문
9. [React] React로 FullCalendar 사용5 - Events 별로 다른 색상 주기
Cucum 2022. 10. 28. 16:17★ FullCalendar 목차
https://dhdl-it.tistory.com/category/React/FullCalendar
안녕하세요. 지난번에 Fullcalendar에 Events 띄우기를 했다면,
오늘은 띄워진 Events들에 각각 다른 색상을 부여해보겠습니다.
최종 결과물)
① 쿼리 수정
이전글에서, fullcalendar에서는 title, date 외에도 start, end, color 등 다양하게 존재함을 알 수 있다고 작성했었는데요,
이때 color 를 이용할 것입니다.
조건에 따라 color를 지정만 해주면, fullcalendar에도 바로 적용됩니다.
이러한 [조건]을 지정할 때 사용하는 함수는 CASE WHEN 함수입니다.
▶ CASE WHEN
: 조건에 따라 값을 지정해주는 역할을 합니다.
CASE WHEN 조건절 THEN 참일때의 값 ELSE 거짓일때의 값 END 컬럼명
(기존에 존재하는 테이블의 UserType을 1/1/1 에서 1/2/3으로 수정했습니다)
CASE WHEN 함수를 이용하여 쿼리를 작성해줍니다.
SELECT id, UserName as title, UserType, StartDate as start, CONVERT(CHAR(10),DATEADD(DAY, 1, EndDate),23) as [end],
CASE
WHEN UserType = 1 THEN '#E0FFFF'
WHEN UserType = 2 THEN '#E6E6FA'
WHEN UserType = 3 THEN '#FFF0F5'
ELSE '#000000'
END AS color
FROM tblTest
ORDER BY StartDate, UserName
▷ node server/server.js를 실행한 터미널을 Ctrl+z 로 종료시킨 후, 재실행해줍니다.
위와 같이, Events 별로 색상이 변경되었음을 알 수 있습니다.
이때, 글자 색깔이 흰색이라 잘 보이지 않는다면,
eventTextColor 옵션을 지정해주면 됩니다.
② text 색상 변경
<FullCalendar /> 를 작성해준 페이지(MyCalendar.js)으로 가서
eventTextColor='black'
를 작성해줍니다.
위의 과정을 모두 거치면 최종적으로 원하는 결과가 나왔음을 알 수 있습니다.
감사합니다.
☆ 전체 코드 ☆
server/server.js
const express = require('express');
const app = express();
app.listen(8088, function () {
console.log('listening on 8088')
});
// mssql 연동
var mssql = require("mssql");
var dbConfig_user = {
server: "",
database: "",
user: "",
password: "",
port: ,
options: { // DeprecationWarning: Setting the TLS ServerName to an IP address is not permitted by RFC 6066. This will be ignored in a future version. 오류 해결
encrypt: false,
trustServerCertificate: true,
}
};
mssql.connect(dbConfig_user, function(err){
if(err){
return console.error('error : ', err);
}
console.log('MSSQL 연결 완료')
});
// main - FullCalendar 화면
app.get('/main', function (req, res) {
var conn = new mssql.ConnectionPool(dbConfig_user);
conn.connect().then(function () {
var req = new mssql.Request(conn);
// EndDate에 +1 을 해줘야, fullCalendar에 제대로 보임.
// 그러나 varchar 형식이기 때문에 DATEADD 함수를 이용하여 하루를 더해주면 datetime 형식으로 변경되기에, 다시 CONVERT 함수 이용해서 varchar 형식으로 변경
req.query(`SELECT id, UserName as title, UserType, StartDate as start, CONVERT(CHAR(10),DATEADD(DAY, 1, EndDate),23) as [end],
CASE
WHEN UserType = 1 THEN '#E0FFFF'
WHEN UserType = 2 THEN '#E6E6FA'
WHEN UserType = 3 THEN '#FFF0F5'
ELSE '#000000'
END AS color
FROM tblTest
ORDER BY StartDate, UserName`).then(function (events) {
console.log('req: ', events.recordset);
conn.close();
res.json(events.recordset);
})
.catch(function (err) {
console.log('err: ', err);
conn.close();
res.json(err);
});
})
.catch(function (err) {
console.log('err: ', err);
res.json(err);
});
});
MyCalendar.js
import React, { Component } from 'react';
import FullCalendar from '@fullcalendar/react';
import dayGridPlugin from '@fullcalendar/daygrid';
import axios from 'axios';
class MyCalendar extends Component {
state = {}
// 아래의 모든 과정은 componentDidMount에 의해, 컴포넌트가 만들어지고 첫 렌더링을 모두 끝낸 후 실행됨
componentDidMount() {
this._getEvents();
}
// _axiosEvents이 응답을 받을때까지 기다리고, 응답을 받는다면 setState 메소드를 호출하여 state 값에 events라는 데이터를 넣어줌
_getEvents = async () => {
const events = await this._axiosEvents();
this.setState({
events
})
}
// axios의 get 메소드를 통해 Back-End의 '/main' url에 정보를 요청하고, 그에 따른 res.data 응답 리턴
_axiosEvents = async () => {
return axios.get('/main')
.then(res => res.data);
}
render() {
let { events } = this.state;
return (
<div className="calendar">
{ events ?
<FullCalendar
defaultView="dayGridMonth"
plugins={[ dayGridPlugin ]}
select={ this.handleDateSelect }
events={ this.state.events }
eventTextColor='black' // 글자 색상
/> :
'loading...'
}
</div>
);
}
}
export default MyCalendar;
'React > FullCalendar' 카테고리의 다른 글
8. [React] React로 FullCalendar 사용4 - mssql 데이터 값 calendar에 보이기 (Fullcalendar에 Events 띄우기) (1) | 2022.10.27 |
---|---|
7. [React] React로 FullCalendar 사용3 - bootstrap 연동 시 글자 색(파란색) (0) | 2022.10.18 |
5. [React] React로 FullCalendar 사용2 - 주말 색상 변경 (0) | 2022.10.12 |
2. [React] React로 FullCalendar 사용1 - 기본 (0) | 2022.09.16 |