Как мне настроить файл webpack.config.js для правильного перехода на другие html-страницы?

Я как бы застрял в том, как настроить файл webpack.config.js, чтобы он мог переходить на другие страницы html. Другими словами, многостраничный сайт response.js.

Я хочу перейти к About.html, щелкнув About в файле Main.jsx. Я пытаюсь использовать маршрутизацию, но знаю, что ошибаюсь.

Я знаю, что основная часть этого находится в webpack.config.js, поэтому я предпринял попытку ниже, чтобы увидеть, работает ли он, пытаясь имитировать HtmlWebPackPlugin({}) из index.html, но это не так.

Примечание: я не использую create-react-app для своего проекта. Я просто пробую что-то за пределами среды create-react-app, а вместо этого в других средах. Я установил Babel и все остальное вручную.

Что я делаю не так и как это исправить?

Вот Main.jsx:

import React, {Component} from "react";
import ReactDOM from "react-dom";
import {Router, Route} from 'react-router';

class Main extends Component {
    constructor(props) {
        super(props);
        this.goToAbout = this.goToAbout.bind(this);
    }

    goToAbout() {
        console.info("clicked");

        return(
            <Router>
                <Route path = {"/About"} component = {Main}/>
            </Router>
        )
    }

    render() {
        return (
            <div>
                <button className = "button is-primary" onClick = {this.goToAbout}>About</button>
            </div>
        );
    }
}

export default Main;

const wrapper = document.getElementById("create-article-form");
wrapper ? ReactDOM.render(<Main/>, wrapper) : false;

// about page (my attempt) 
const aboutWrapper = document.getElementById("about-page"); 
aboutWrapper ? ReactDOM.render(<Main/>, wrapper) : false;

Вот About.html:

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>About Section</h1>
    <div id = "about-page"></div>
</body>
</html>

Вот webpack.config.js:

const HtmlWebPackPlugin = require("html-webpack-plugin");
module.exports = {
    module: {
        rules: [
            {
                test: /\.(js|jsx)$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader"
                }
            },
            {
                test: /\.html$/,
                use: [
                    {
                        loader: "html-loader"
                    }
                ]
            }
        ]
    },
    plugins: [
        new HtmlWebPackPlugin({
            template: "./src/index.html",
            filename: "./index.html"
        }),

        // my attempt
        new HtmlWebPackPlugin({ 
            template: "./src/About.html",
            filename: "./About.html"
        })
    ]
};

Маршрутизация не имеет ничего общего с Webpack - в вашем маршруте «О программе» используйте компонент для About, т.е. замените About.html на компонент

ic3b3rg 04.01.2019 04:07

@ ic3b3rg Как я уже упоминал выше, я хочу перенаправить в файл About.html, а не на другой компонент response.js

greyskies 04.01.2019 04:09

хорошо, попробуйте удалить компонент и изменить путь к path = "/About.html"

ic3b3rg 04.01.2019 04:14

о, подождите минутку - вы не хотите возвращать DOM из вашего события onclick - ваш маршрутизатор должен войти в ваш render, а button, который у вас есть, должен быть Link

ic3b3rg 04.01.2019 04:18

@ ic3b3rg ах, хорошо, я понимаю, что ты имеешь в виду. Не могли бы вы привести мне пример, использующий мой сценарий? Поскольку <Route/> должен принимать атрибут component, но в моем случае я не хочу, чтобы он перенаправлялся на другой компонент js.

greyskies 04.01.2019 04:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
545
3

Ответы 3

Я не верю, что это связано с веб-пакетом.

Вместо

<button className = "button is-primary" onClick = {this.goToAbout}>About</button>

использовать:

<Link to = "/About/">About</Link>

Если вы пытаетесь создать ссылку на страницу, которая не находится внутри response, вы можете использовать что-то вроде:

<a href = {`${window.location.origin}/about`} />`

Вы захотите использовать стандартный тег привязки HTML с href, установленным в то место, куда вы хотите перейти.

хм, хорошо, поэтому с <a href = { $ {window.location.origin} / about} /> я пытаюсь указать путь к файлу для About.html, но он не распознает его.

greyskies 04.01.2019 04:27
instead of <Route path = {"/About"} component = {Main}/> use 
<BrowserRouter>
<div>
<Switch>
<Link  path = "/about" component = "{Main}">
</Switch>
</div>
</BrowserRouter>or

<Link to = "/about"></Link> and 

and import {BrowserRouter,Route,Switch,Link} from 'react-router-dom';

Здесь куча проблем - это должно указать вам в правильном направлении:

Main.jsx

import React from "react";
import {Link, Router, Route, Switch} from 'react-router';  // <- this should be 'react-router-dom' -- upgrade?

const Main = () => (
  <Router>
    <Switch>
      <Route path = "/About.html" />
    <Switch>
    <Link to = "/About.html">About</Link>
  </Router>
);

ReactDOM.render(<Main/>, document.getElementById("app"));  // <- your React app should be mounted to a single element  

webpack.config.js

const HtmlWebPackPlugin = require("html-webpack-plugin");
module.exports = {
    entry: "./src/js/Main",  // <- replace with actual path to Main.jsx
    module: {
        rules: [
            {
                test: /\.(js|jsx)$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader"
                }
            },
            {
                test: /\.html$/,
                use: [
                    {
                        loader: "html-loader"
                    }
                ]
            }
        ]
    },
    plugins: [
        new HtmlWebPackPlugin({
            template: "./src/index.html",
            filename: "./index.html"
        })
    ]
};

Другие вопросы по теме