РЕАКЦИЯ: Как мне изменить отрендеренный JSX на моем тестовом сайте?

Я пытаюсь изучить React и в настоящее время тестирую свой личный веб-сайт.

Вопрос в том, что я действительно не знаю, как заставить мой сайт отображать новый JSX. В чистом HTML я просто использую ссылку на кнопку, а затем связываю ее со своим вторым файлом HTML. Я пытаюсь сделать это с помощью this.setState и handleClick(). Я опубликую соответствующий код.

Может ли кто-нибудь объяснить это или дать мне решение? Я застрял на этом весь день!

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import Explore from './Components/Explore';
import './index.css';
import reportWebVitals from './reportWebVitals';


export class Home extends React.Component {
  constructor(props) {
    super(props);
    this.handleCick = this.handleCick.bind(this);
    this.state = { page: <App onClick = {this.handleClick}/> }
  }
  handleCick() {
    this.setState({ page: <Explore /> })
  }
  render () {
    return this.state.page
  }
}




 const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <Home />
  </React.StrictMode>
);

App.js

import React from 'react';
import './App.css';

class App extends React.Component {
  render () {
    return (
      <div className = "App">
        <header className = "App-header">
          <div className = "pb" alt = "Profile picture"></div>
          <h1>Magnus Pladsen</h1>
          <h2>Junior Developer</h2>
          <div className = "icons">
            <a href = ""><div className = "icon facebook"></div></a>
            <a href = "" target = "_blank"><div className = "icon linkedin"></div></a>
            <a href = "" target = "_blank"><div className = "icon github"></div></a>
          </div>
            <button onClick = {this.props.onClick}>Explore</button>
        </header>
      </div>
    );
  }
}


export default App;

Исследуйте.js

import React from 'react';
import './Explore.css';



class Explore extends React.Component {
    render() {
        return (
            <div className = "Explore">
              <header className = "Explore-header">
                <div className = "pb" alt = "Profile picture"></div>
                <h1>TEST</h1>
                <h2>THIS CODE WILL CHANGE WHEN I GET IT TO RENDER</h2>
                <div className = "icons">
                  <a href = "" target = "_blank"><div className = "icon facebook"></div></a>
                  <a href = "" target = "_blank"><div className = "icon linkedin"></div></a>
                  <a href = "" target = "_blank"><div className = "icon github"></div></a>
                </div>
              </header>
            </div>
        );
    }
}

export default Explore;

🤔 А знаете ли вы, что...
JavaScript позволяет создавать мобильные приложения для iOS и Android с использованием фреймворков, таких как React Native и NativeScript.


30
1

Ответ:

Решено

Вы делаете это неправильно в React. У вас есть несколько вариантов.

Я настоятельно рекомендую взглянуть на Реактивный маршрутизатор

Это, безусловно, лучшее решение, и вы получите код, аналогичный приведенному ниже, в вашем компоненте App.js.

Документы достаточно просты, чтобы следовать базовому примеру.

import React from 'react'
import { HashRouter as Router, Route, Switch } from 'react-router-dom'

// import pages
import Home from './pages/Home'
import Explore from './pages/explore'

function App() {
  return (
   <Router>
     <Switch>
       <Route exact path = "/">
         <Home />
       </Route>
       <Route path = "/explore">
         <About />
       </Route>
     </Switch>
   </Router>
  )
}

export default App; 

Вы также можете использовать использовать историю (), у которого также есть простые примеры.

Если вы просто играете, есть вариант со старым добрым ванильным JS.

window.open(<yourpage>)