首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React.js和将autoHide称为属性

React.js和将autoHide称为属性
EN

Stack Overflow用户
提问于 2015-06-25 08:59:27
回答 1查看 706关注 0票数 0

我有一个物化-css组件,我正试图将其转换为响应。是DeterminatePreloader。我希望手头有autoHide属性,如果showtrue,则将变量autoHide设置为false。由于autoHide是一个属性,因此当函数调用它时,应该可以设置它。我将非常感谢您的意见。我发现的例子要么过于笼统,要么过于具体。

到目前为止,我的代码如下:

代码语言:javascript
复制
var React = require('react');

/**
 * Linear Determinate Preloader
 *
 * Materialize CSS converted to React Component
 *
 * @author samtapucar
 */

var DeterminatePreloader = <determinatePreloader autoHide={false}/>;

var DeterminatePreloader = React.createClass({

  /**
   * Initializes determinate preloader state
   * @returns {{percent: number, show: boolean}}
   */
  getInitialState: function ()
  {
    return{
      percent: 0,
      show: true
    };
  },

  /**
   * Sets determinate preloader state using received value
   * @param value
   */
  setValue: function (value)
  {
    var state = this.state;
    state.percent = value;

    if ( state.percent >= 100 ){
      this.props.autoHide = true;
    }

    if ( this.props.autoHide ) {
      state.show = false;
      this.setState(state);
    }
    else{
      this.setState(state);
    }
  },

  /**
   * Renders the determinate preloader.
   * @returns {XML}
   */
  render: function ()
  {
    var percent = this.state.percent;

    var cx = '';

    var style = {
      'width': percent + '%'
    };

    if (!this.state.show)
      cx = ' hide'


    return (
        <div className={"progress" + cx}>
          <div className={'determinate'} style={style}></div>
        </div>
    );
  }

});

module.exports = DeterminatePreloader;
EN

回答 1

Stack Overflow用户

发布于 2015-06-26 07:11:12

你的代码有一些问题。

  1. 您需要定义两次DeterminatePreloader。第一个语句是不必要的,因为您还没有定义组件。如果要设置autoHide的默认值,请使用getDefaultProps方法。
  2. state应该包含尽可能少的内容。render方法应该计算show变量,因为它依赖于percentautoHide。我也会将percent作为道具来传递,因为您在这个组件中没有任何逻辑。
  3. state 不应该被直接覆盖。您应该始终创建一个新的对象,用setState修改它。
代码语言:javascript
复制
var React = require('react');

/**
 * Linear Determinate Preloader
 *
 * Materialize CSS converted to React Component
 *
 * @author samtapucar
 */

var DeterminatePreloader = React.createClass({
  getDefaultProps: function() {
    return {
      autoHide: false,
      percent: 0
    };
  }
  /**
   * Renders the determinate preloader.
   * @returns {ReactComponent}
   */
  render: function () {   
    var style = {
      'width': this.props.percent + '%'
    };

    var cx = '';

    if (this.props.percent >= 100 && this.props.autoHide)
      cx = ' hide';

    return (
        <div className={"progress" + cx}>
          <div className="determinate" style={style}></div>
        </div>
    );
  }

});

module.exports = DeterminatePreloader;

我还建议您阅读反应思维。它可以帮助你在react中获得正确的编程感觉。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31045711

复制
相关文章

相似问题

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