【问题标题】:Converting contents from html to ReactJS file将内容从 html 转换为 ReactJS 文件
【发布时间】:2026-01-07 22:15:02
【问题描述】:

如果问题令人困惑,我们深表歉意。基本上我有这个html代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>A Gentle Introduction</title>

    <script
      src="https://rawgit.com/flatiron/director/master/build/director.min.js">
    </script>

    <script>
      var author = function () { console.log("author"); };
      var books = function () { console.log("books"); };
      var viewBook = function (bookId) {
        console.log("viewBook: bookId is populated: " + bookId);
      };

      var routes = {
        '/author': author,
        '/books': [books, function() {
          console.log("An inline route handler.");
        }],
        '/books/view/:bookId': viewBook
      };

      var router = Router(routes);

      router.init();
    </script>
  </head>

  <body>
    <ul>
      <li><a href="#/author">#/author</a></li>
      <li><a href="#/books">#/books</a></li>
      <li><a href="#/books/view/1">#/books/view/1</a></li>
    </ul>
  </body>
</html>

这显然是在一个 .html 文件中。我想把它改成 .js 文件,这样我就可以把 html 放在 js 中,这样当点击不同的链接时,路由/返回的内容是不同的。

我真的不知道如何直接将其放入 javascript 文件中,然后让路由器工作。这是 html 文件来自 https://github.com/flatiron/director#client-side-routing 的地方,我正在尝试使用这个 flatiron/director 路由器。

任何帮助都会很棒!

【问题讨论】:

    标签: javascript html reactjs router


    【解决方案1】:

    我能够使其与 react 和 jsx 以及外部的路由代码一起使用。

    用 es6/es2015 编写

    app.js

    const author = () => { console.log("author"); };
    const books = () => { console.log("books"); };
    const viewBook = (bookId) => { console.log("viewBook: bookId is populated: " + bookId); };
    
    const routes = {
      '/author': author,
      '/books': [books, () => { console.log("An inline route handler."); }],
      '/books/view/:bookId': viewBook
    };
    
    const router = Router(routes);
    
    router.init();
    
    class SampleRouting extends React.Component {
      render() {
        return (
          <ul>
            <li><a href="#/author">#/author</a></li>
            <li><a href="#/books">#/books</a></li>
            <li><a href ="#/books/view/1">#/books/view/1</a></li>
          </ul>
        )
      }
    }
    
    React.render( <SampleRouting/> , document.getElementById('root'));
    

    index.html

    <div id="root"></div>
    

    示例: http://s.codepen.io/oobgam/debug/vNoogO

    _edited app.js 以反映状态和页眉的更新

    class App extends React.Component {
     constructor(props) {
        super(props);
        this.state = { currentPage: 'author' }
     }
    
      componentDidMount() {
        const author = () => { this.setState({currentPage: 'author'}) };
        const books = () => { this.setState({currentPage: 'Books'}); };
        const viewBook = (bookId) => { this.setState({currentPage: 'Book ' + bookId }); };
        const routes = {
          '/author': author,
          '/books': books,
          '/books/view/:bookId': viewBook
        };
        const router = Router(routes);
        router.init();
      }
    
      render() {
        return (
          <div>
            <h1>{ this.state.currentPage }</h1>
            <SampleRouting />
          </div>
        );
      }
    }
    
    // stateless function
    const SampleRouting = () => {
       return (
          <ul>
            <li><a href="#/author">#/author</a></li>
            <li><a href="#/books">#/books</a></li>
            <li><a href ="#/books/view/1">#/books/view/1</a></li>
          < /ul>
        )
    }
    

    【讨论】:

    • 我看到你在那里做了什么,但是当我点击作者和

      BOOK PAGE

      时你会如何返回说

      AUTHOR PAGE

      书?
    • 你可以在你放入路由的函数上使用this.setState。我为此更新了笔。我创建了一个容器 React 元素来处理应用程序的状态。