首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react rails宝石在视图帮助器react_component中传递哈希

react rails宝石在视图帮助器react_component中传递哈希
EN

Stack Overflow用户
提问于 2016-06-14 12:21:58
回答 2查看 490关注 0票数 0

我使用react rails创业板,在将散列传递给react_component视图助手时遇到了困难:

怎样才能相当于

代码语言:javascript
复制
React.render(<BookApp books={BOOKS} />, document.getElementById('react-container')); 

看上去像?

我以为

代码语言:javascript
复制
<div id="react-container">
  <%= react_component('BookApp', books: '{BOOKS}') %>
</div>

但是这种方法不会将散列值作为道具传递。我遗漏了什么?

在books.js.jsx中

代码语言:javascript
复制
var BOOKS = {
  ulysses: {
    slug: 'ulysses',
    title: 'Ulysses',
    body: 'YES BECAUSE HE NEVER DID...'
  },
  seizeTheDay: {
    slug: 'seizeTheDay',
    title: 'Seize the Day',
    body: 'Seize the Day, first published in 1956...'
  }
};

var CollapsibleBlock = React.createClass({
render: function() {
    return(
      <div className=
        {this.props.toggleState ? 'open' :
                                  'closed'}>
        <h3 onClick=
          {this.props
               .toggleHandler
               .bind(null, this.props.book.slug)}> // Uncaught TypeError: Cannot read property 'slug' of undefined
        </h3>
        <p>{this.props.book.body}</p>
      </div>
    );
  }
});

var BookApp = React.createClass({
    getInitialState: function() {
    return {
      ulysses: true,
      seizeTheDay: false
    }
  },
// code omitted

render: function() {
    return(
      <div>
        <h1>Toggable Content</h1>
        <button onClick={this.toggleAll}>Toggle all</button> {}
        <div>
          {this.toggableBooks(this.props.books)}
        </div>
      </div>
    )
  }
});

在CollapsibleBlock中,我得到了错误消息:

未定义的TypeError:无法读取未定义属性的“段塞”

我猜想这是由视图页面上的react_component调用中没有传递的空Books造成的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-14 17:57:29

您想给React组件一个JavaScript常量的名称,对吗?

那么,将名称作为字符串传递如何:

代码语言:javascript
复制
<div id="react-container">
  <%= react_component('BookApp', books_name: 'BOOKS') %>
</div>

然后,在组件中,使用字符串从window查找一个常量:

代码语言:javascript
复制
var BookApp = React.createClass({
  getInitialState: function() {
    // Look up BOOKS by name: 
    var books = window[this.props.books_name]
    // store the object as this.state.books
    return {
      ulysses: true,
      seizeTheDay: false,
      books: books,
    }
  },
  // ...
}
票数 1
EN

Stack Overflow用户

发布于 2016-06-14 12:38:11

不如:

代码语言:javascript
复制
<div id="react-container">
  <%= react_component('BookApp', booksJSON: @books.to_json) %>
</div>

在构成部分中:

代码语言:javascript
复制
getInitialState: function () {
  return {
    books: (this.props.booksJSON.length > 0 ? JSON.parse(this.props.booksJSON) : []),
  }
  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37811890

复制
相关文章

相似问题

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