Преактировать компонент рендеринга в указанный div - PullRequest
2 голосов
/ 01 апреля 2019

Поскольку приложение preact, сгенерированное из preact cli, не поставляется с index.html, каждый компонент рендеринга будет добавляться к тегу body, но я хочу отобразить компонент в указанном div. Например внутри вот мой component/app.js

import { h, Component } from 'preact';
import { Router } from 'preact-router';
import 'bootstrap/dist/css/bootstrap.min.css';

import Header from './header';

// Code-splitting is automated for routes
import Home from '../routes/home';
import Profile from '../routes/profile';
import Github from '../routes/github';
import List from '../routes/list';

export default class App extends Component {

    /** Gets fired when the route changes.
     *  @param {Object} event       "change" event from [preact-router](http://git.io/preact-router)
     *  @param {string} event.url   The newly routed URL
     */
    handleRoute = e => {
        this.currentUrl = e.url;
    };

    render() {
        return (
            <div id="app">
                <Header />
                <Router onChange={this.handleRoute}>
                    <Home path="/" />
                    <Profile path="/profile/" user="me" />
                    <Profile path="/profile/:user" />
                    <Github path="/github" />
                    <List path="/list" />
                </Router>
            </div>
        );
    }
}

и это мой index.js в routes/list

import { h, Component } from 'preact';
import axios from 'axios';

export default class List extends Component {
  state = {
      data : []
    };
  fetchUser = () => {
      axios.get(`https://api.dev.xxx`)
      .then(response =>{
       const data = response.data.data;
       this.setState({data: data})
      });
  }
  setUsername = e => {
      this.setState({ username: e.target.value });
      this.fetchUser();
  }
  componentDidMount() {
      this.fetchUser();
  }
  render({}, {data}) {
      return (
        <div class="container">
          <h1>Listnya</h1>
          {
              data.map(d=>(
                <div class="card">
                    <p>{d.id}</p>
                    <p>{d.name}</p>
                </div>
              ))
          }
        </div>
      );
   }
}

как мы можем видеть в приведенном выше коде, <div class="container"> будет добавлен к телу, но я хочу сделать карту внутри контейнера div, который был указан заранее. Как это сделать?

1 Ответ

0 голосов
/ 23 апреля 2019

Если у вас все в порядке с использованием кандидата на выпуск, вы можете обновить его до 3.0: (в котором есть template.html в корне) https://twitter.com/_prateekbh/status/1114071027238047746

...