首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将React类移动到单独的文件中

将React类移动到单独的文件中
EN

Stack Overflow用户
提问于 2015-08-31 05:50:01
回答 1查看 38.6K关注 0票数 29

执行完React tutorial后,这是我的index.html文件:

代码语言:javascript
复制
<!-- index.html -->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Hello React</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/react.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.3/JSXTransformer.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.2/marked.min.js"></script>
  </head>
  <body>
    <div id="content"></div>
    <script src="lib/main.js"></script>
  </body>
</html>

这是我的src/main.jsx文件:

代码语言:javascript
复制
var CommentBox = React.createClass({
  getInitialState: function() {
    return {data: []};
  },
  loadCommentsFromServer: function() {
    $.ajax({
      url: this.props.url,
      dataType: 'json',
      cache: false,
      success: function(data) {
        this.setState({data: data});
      }.bind(this),
      error: function(xhr, status, err) {
        console.error(this.props.url, status, err.toString());
      }.bind(this)
    });
  },
  handleCommentSubmit: function(comment) {
    var comments = this.state.data;
    var newComments = comments.concat([comment]);
    this.setState({data: newComments});

    $.ajax({
      url: this.props.url,
      dataType: 'json',
      type: 'POST',
      data: comment,
      success: function(data) {
        this.setState({data: data});
      }.bind(this),
      error: function(xhr, status, err) {
        console.error(this.props.url, status, err.toString());
      }.bind(this)
    });
  },
  componentDidMount: function() {
    this.loadCommentsFromServer();
    setInterval(this.loadCommentsFromServer, this.props.pollInterval);
  },
  render: function() {
    return (
      <div className="commentBox">
        <h1>Comments Yo</h1>
        <CommentForm onCommentSubmit={this.handleCommentSubmit} />
        <CommentList data={this.state.data} />
      </div>
    );
  }
});

var CommentForm = React.createClass({
  handleSubmit: function(e) {
    e.preventDefault();
    var author = React.findDOMNode(this.refs.author).value.trim();
    var text = React.findDOMNode(this.refs.text).value.trim();
    if (!text || !author) {
      return;
    }

    // send request to the server
    this.props.onCommentSubmit({author: author, text: text});
    React.findDOMNode(this.refs.author).value = '';
    React.findDOMNode(this.refs.text).value = '';
    return;
  },
  render: function() {
    return (
      <form className="commentForm" onSubmit={this.handleSubmit}>
        <input type="text" placeholder="Your name" ref="author" />
        <input type="text" placeholder="Say something..." ref="text" />
        <input type="submit" value="Post" />
      </form>
    );
  }
});

var CommentList = React.createClass({
  render: function() {
    var commentNodes = this.props.data.map(function (comment) {
      return (
        <Comment author={comment.author}>
          {comment.text}
        </Comment>
      );
    });
    commentNodes.reverse();
    return (
      <div className="commentList">
        {commentNodes}
      </div>
    );
  }
});

var Comment = React.createClass({
  render: function() {
    var rawMarkup = marked(this.props.children.toString(), {sanitize: true});
    return (
      <div className="comment">
        <h2 className="commentAuthor">
          {this.props.author}
        </h2>
        <span dangerouslySetInnerHTML={{__html: rawMarkup}} />
        <hr />
      </div>
    );
  }
});

React.render(
  <CommentBox url="comments.json" pollInterval={2000} />,
  document.getElementById('content')
);

此外,我运行此命令将我的jsx转换为js:

代码语言:javascript
复制
babel --watch src/ --out-dir lib/

我想将每个React类移动到它自己的文件中。例如,我想创建以下四个文件(注意:每个文件都映射到我的main.jsx文件中的一个顶级"var“声明),并将所有这些类都放入我的main.jsx文件中:

代码语言:javascript
复制
comment.jsx
commentList.jsx
commentForm.jsx
commentBox.jsx

我该怎么做呢?

在这里讨论了一段时间后,我仍然没有很好的直觉来区分它们,或者像require / es6这样的东西是否是解决这个问题的正确方法。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2017-10-11 14:58:19

在使用create-react-app工具创建的项目中,分离组件看起来很好,如下所示。在文件Hello.jsx中定义组件

代码语言:javascript
复制
import React from 'react';

var Hello = React.createClass({
  render: function() {
    return (
      <p>Hello world!</p>
    );
  }
});

// Must export!
export default Hello;

然后,您可以使用以下命令将组件导入另一个文件中

代码语言:javascript
复制
import Hello from './Hello.jsx'
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32301490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档