์ค๋์ D3.js v4๋ก ์ ๊น ๊ธฐ์ด๋ฅผ ๋ ํํ๋๋ฐ ์ด๋ฒ์ v5๋ก ๊ธฐ๋ณธํ์ ๋ค์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค์. ์์ post์์ "์ฌ๊ฐํ ๋ฌธ์ D3.js๋ฅผ ๋์ ํด๋ณด์"์์ ์ ์ ๋ค๋ฃจ์๋๋ฐ ์ด๋ฒ post๋ ๊ธฐ๋ณธ ํ ๋ถํฐ ํด์ ์์ฐจ์ ์ผ๋ก ๋ด์ฉ์ ์ ๋ฆฌํ์ฌ ๊ฐ๋จํ post๋ฅผ ํด๋ณผ๊น ํฉ๋๋ค.
์์ ๋ฅผ ํตํด ๊ฐ๋จํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
var data = [1,2,3,4,5];
//๊ฐฑ์
var p = d3.select("body").selectAll("p").data(data)
.text(function(d){return d;})
//์ถ๊ฐ
p.enter().append("p")
.text(function(d){return d;})
//์ข
๋ฃ
p.exit().remove();
์ ์์ค์์ ๋ณด๋ฏ์ด ๋ฑ 3๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค.
์ฌ๊ธฐ์, ํ๊ทธ๋ body, p ํ๊ทธ๋ก ์คํํ์ง๋ง ๋ค๋ฅธ ํ๊ทธ๋ก ์ ๊ทผํด์ ์คํ์ ํ์ ๋ ๋ฉ๋๋ค. ๋, ๋ํ ์ผ ์ ๊ทผ์ผ๋ก html๋ฌธ์์ ํ๊ทธ id, class๋ก๋ ์ ๊ทผ์ ํ ์ ์์ต๋๋ค.
์์ ) pํ๊ทธ๊ฐ 3๊ฐ์ผ ๋
<body>
<p>a</p>
<p>b/p>
<p>c</p>
<script src="https://d3js.org/d3.v5.min.js"></script>
<script>
var data = [1,2,3,4,5];
//๊ฐฑ์
var p = d3.select("body").selectAll("p").data(data)
.text(function(d){return d;})
//์ถ๊ฐ
p.enter().append("p")
.text(function(d){return d;})
//์ข
๋ฃ
p.exit().remove();
</script>
</body>
[๊ฒฐ๊ณผ] ๊ธฐ์กด pํ๊ทธ์ 1,2,3์ผ๋ก ๊ฐฑ์ ์ด ๋๊ณ ์๋กญ๊ฒ pํ๊ทธ 2๊ฐ๊ฐ ์ถ๊ฐ๋์ด ์ด 5๊ฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ค์.
1
2
3
4
5
**์์ ) pํ๊ทธ๊ฐ 7๊ฐ์ผ ๋ **
<body>
<p>a</p>
<p>b/p>
<p>c</p>
<p>d</p>
<p>e</p>
<p>f</p>
<p>g</p>
<script src="https://d3js.org/d3.v5.min.js"></script>
<script>
var data = [1,2,3,4,5];
//๊ฐฑ์
var p = d3.select("body").selectAll("p").data(data)
.text(function(d){return d;})
//์ถ๊ฐ
p.enter().append("p")
.text(function(d){return d;})
//์ข
๋ฃ
p.exit().remove();
</script>
</body>
[๊ฒฐ๊ณผ] : ๋ฐ์ดํฐ๋ 5๊ฐ์ด๊ณ ๊ทธ๋ฌ๋ฉด ์ ํ๋ pํ๊ทธ 7๊ฐ์์ 5๊ฐ๋ ๊ฐฑ์ ์ด ๋๊ณ ๋๋จธ์ง 2๊ฐ๋ exit()์ข ๋ฃํ๋๋ฐ ๋๋จธ์ง remove()ํจ์๋ก ์ ๊ฑฐ ๋๊ฒ ๋ฉ๋๋ค.
1
2
3
4
5
๊ทธ๋ฆฌ๊ณ , exit() ์ข ๋ฃํจ์๋ง ์๊ณ remove()ํจ์๋ฅผ ์ ๊ฑฐํ๋ฉด ์๋์ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
1
2
3
4
5
f
g
remove()ํจ์์ ๋ํ ์๋ฏธ๋ฅผ ์ ์ดํดํ์๋ฉด ๋ฉ๋๋ค.
์ด๋ฐ์ ํ๊ทธ ์์น ์ ํ์ select(), ํ๊ทธ ๋ฒ์ ์ ํ์ selectAll(), ์ ํ ํ๊ทธ ๋ฒ์์ ์ถ๋ ฅ ํ ๋ฐ์ดํฐ์ data()ํจ์๋ก ์ฌ์ฉํฉ๋๋ค.
enter(), append() ์์ง ๋ฐ์ดํฐ๊ฐ ๋จ์ ์์ ๋ ๋๋จธ์ง๋ฅผ ํด๋น ํ๊ทธ๋ฅผ ์ถ๊ตฌํ ๋ ์ฌ์ฉํ๋ ํจ์์
๋๋ค.
์ค๋ post์์๋ text()ํจ์๊ฐ ์๋๋ฐ ๊ฐฑ์ ๊ณผ ์ถ๊ฐ ๋ถ๋ถ์ text() ํจ์๊ฐ ํํ ๋์๋๋ฐ ๊ฐฑ์ ๋ถ๋ถ์ ๊ธฐ์กด์ pํ๊ทธ์ ์ถ๊ฐ๋ถ๋ถ์ ์๋ก์ด pํ๊ทธ์ data๊ฐ์ ์ถ๋ ฅํ๋๋ฐ text()ํจ์๋ก ํ
์คํธ ํํ๋ก ์ถ๋ ฅ์ํค๋ ๋ฌธ์ฅ์
๋๋ค. ์ด ๋ถ๋ถ์ ๋ค๋ฅธ ํํ๋ก ํ๋ฉด ํด๋น ํํฐ๋ก ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค. ๊ธฐ๋ณธ ํ
์คํธ ์ด๊ธฐ ๋๋ฌธ์ text()ํจ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ณ ์ํ๋ ํํ๋ก ์ถ๋ ฅํ๊ณ ์ ํ ๋ ์ด ๋ถ๋ถ์ ์ ํ์ฉํ์ฌ ์์ฉํ์๋ฉด ๋ฉ๋๋ค.
๋ง์ง๋ง ์ข
๋ฃ๋ถ๋ถ์ exit()ํจ์๋ ์ข
๋ฃ์ด๊ณ remove()์ ๋๋จธ์ง ๋ถ๋ถ์ ์ ๊ฑฐํ๋ ํจ์์
๋๋ค. remove()ํจ์๋ง ์ฃผ์ํ๋ฉด ๊ธฐ์ด์ ์ธ ๋ถ๋ถ์์๋ ์ด๋ ค์์ด ์๋ ๊ฒ ๊ฐ์์.
์ฝ๋ฉ์ ํ ๋ ์ ์ธ๋ถ๋ถ์ ์์ญ์ผ๋ก ๋๋ ์ ์ฝ๋ฉ์ ํ๋ฉด ๋ฉ๋๋ค. ๊ธฐ์กด์ ํ๊ทธ์์ ๊ฐฑ์ ์ด๋ ์ถ๊ฐํ๊ณ ์ถ์ ๋ ํด๋น ์์ญ ์์น์ ์ํ๋ ๋์ ๋ช
๋ น ์ฝ๋ฉ์ ์ฝ์
๋ง ํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์๋ ๋ณ์ p๋ก ์ ์ธํ๊ณ d3์ฝ๋ฉ์ ์ ์ฅํ๋๋ฐ, p๋ณ์๋ก ํด๋น ๋ช
๋ น ์ฝ๋ฉ์ ์ ๊ทผํ๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํด์ ์
๋๋ค. ์ฌ๊ธฐ์ d3๋ก ๋์์ํค๊ณ ์ ํ๋ ํด๋น ํ๊ทธ๋ช
์ ๋ณ์๋ช
์ผ๋ก ํ์๋ฉด ๋์ค์ ๋ณ์๋ช
๋ง ๋ณด๋ฉด ์ด๋ค ํ๊ทธ์์ ํน์ ๋์์ด ์ด๋ฃจ์ด์ง๋์ง ์ฝ๊ฒ ๊ตฌ๋ณํ ์ ์์ต๋๋ค. ๋ณ์๋ช
์ผ๋ก ์๋ฏธ๋ฅผ ์ ์ ๋ฌ ํ ์ ์๋ ์ด๋ฆ์ผ๋ก ์ง์ด์ฃผ๋๊ฒ ์ข์ต๋๋ค.
var p = d3.select("body").selectAll("p").data(data)
.text(function(d){return d;})
์ ์ฝ๋ฉ์ ๋ณด๋ฉด p๋ผ๋ ๋ณ์๋ช ๋ง ๋ณด๋ฉด pํ๊ทธ์์ ๋ญ๊ฐ์ ๋์์ ์ํํ๊ฒ ๊ตฌ๋ ํ๊ณ ์ฝ๊ฒ ์๋ณ์ด ๋ฉ๋๋ค. ๋์ค์ ์ฌ๋ฌ ํ๊ทธ์ ๋ณตํฉ์ ์ผ๋ก ์ฌ์ฉํ ๋ ์์ฃผ ์ข์ต๋๋ค. ํ๊ทธ๊ฐ d3ํํ์ ํ ๋ ํ์ชฝ ํ๊ทธ์์ ๋ค๋ฅธ์ชฝ ํ๊ทธ์ d3 ๋์์ ๊ฐ์ ธ์ฌ ๋ ํด๋น ๋ณ์๋ช ์ผ๋ก ๊ฐ์ ธ์์ ์ ๊ทผํ๋ฉด ์ฝ๋ฉ ๊ตฌ๋ณํ๋๋ฐ ์ฝ๊ณ ์ฝ๋ฉ๋ ๊น๋ํด์ง๋๋ค. ์ด๋ถ๋ถ์ ์์ฃผ ์ฌ์ฉ๋๋ ํํ์ด๋ผ ๋์ค์ post์ ๋ด์๋ณด๊ฒ ์ต๋๋ค.