JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/5.0.3/pixi.min.js"></script>
<canvas id='game_canvas'>
</canvas>

CSS

body {
  margin: 0px;
}

JavaScript

const canvas = document.getElementById('game_canvas')

const app = window.app = new PIXI.Application({
  view: canvas,
  forceCanvas: false,
  antialias: true,
  width: window.innerWidth,
  height: window.innerHeight
})

const TILE_SIZE = 32
const CHUNK_SIZE = 4

function createTileTexture(color) {
  let graphics = new PIXI.Graphics()
  graphics.beginFill(color)
  graphics.drawRect(0, 0, TILE_SIZE, TILE_SIZE)
  graphics.endFill()
  return app.renderer.generateTexture(graphics)
}

function createBorderTexture(color) {
  let graphics = new PIXI.Graphics()
  graphics.lineStyle(1, 0xff0000)
  graphics.drawRect(0, 0, CHUNK_SIZE * TILE_SIZE, CHUNK_SIZE * TILE_SIZE)
  return app.renderer.generateTexture(graphics)
}

function createTile(texture, row, col) {
  let sprite = new PIXI.Sprite(texture)
  sprite.position.set(col * TILE_SIZE, row * TILE_SIZE)
  return sprite
}

function createChunk() {
  const chunk = {}
  chunk.sprite = new PIXI.Container()
  return chunk
}

function createFullChunk() {
  let redTileTexture = createTileTexture(0x0000ff)

  return createPopulatedChunk(redTileTexture, (row, col) => {
    return true
  })
}

function createPartialChunk() {
  let greenTileTexture = createTileTexture(0x00ff00)

  return createPopulatedChunk(greenTileTexture, (row, col) => {
    return Math.random() < 0.1
  })
}

function createPopulatedChunk(texture, condition) {
  const chunk = createChunk()
  for (let row = 0; row < CHUNK_SIZE; row++) {
    for (let col = 0; col < CHUNK_SIZE; col++) {
      if (condition(row, col)) {
        let tile = createTile(texture, row, col)
        chunk.sprite.addChild(tile)
      }
    }
  }

  chunk.sprite.cacheAsBitmap = true
  return chunk
}

let world = new PIXI.Container()

let numChunksInRow = 3
let borderTexture = createBorderTexture()
let chunks = []

for (let row = 0; row < numChunksInRow; row++) {
  for (let col = 0; col < numChunksInRow; col++) {
    let chunkGridSprite = new PIXI.Sprite(borderTexture)
    let partialChunk =...