An easy way to use React with Django.
pip install django-vite-reactINSTALLED_APPS = [
    ...
    'react',
    ...
]Create file package.json
{
  "name": "django-react",
  "version": "1.0.0",
  "description": "use react.js in django templates",
  "main": "index.js",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "ChanMo",
  "license": "ISC",
  "devDependencies": {
    "@vitejs/plugin-react": "^3.1.0",
    "vite": "^4.1.1"
  },
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"      
  }
}Create file vite.config.js
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  build: {
    outDir: 'static/dist/',
    manifest: true,
    rollupOptions: {
      input: [
        'components/app.jsx',
      ]
    }
  }
})Install npm package
npm install
npm run devExample components/app.jsx
import React from 'react';
import ReactDom from 'react-dom/client';
function App(props) {
  return (
    <h1>{props.title}</h1>
  )
}
const root = ReactDom.createRoot(document.getElementById("app"));
root.render(
  <App {...window.props} />
);from django.views.generic import TemplateView
from react.mixins import ReactMixin
class IndexView(ReactMixin, TemplateView):
    app_root = 'components/app.jsx'
    def get_props_data(self):
        return {
            'title': 'Hello'
        }http://localhost:8000/
Before deploy, run yarn dev,
First of all, you need to compile the React files.
npm run buildThis command will compile the React files into the static/dist directory.
Then, make sure that DEBUG=False in the Django settings.
. ├── backend │ ├── asgi.py │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── db.sqlite3 ├── manage.py ├── node_modules ├── package.json ├── todo │ ├── admin.py │ ├── apps.py │ ├── components │ │ └── todo.jsx │ ├── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── static │ └── dist │ ├── assets │ │ └── todo-1cc3d04a.js │ └── manifest.json └── vite.config.js
- [ ] easier to integrate
- [ ] decorate function