在React

时间:2016-09-21 19:14:09

标签: javascript function reactjs render

我试图从反应中的函数动态返回div。我调用一个函数直接在组件渲染函数中渲染,但它没有渲染出来。我确定它在代码中是一个简单的错误,但我无法发现它。

代码:

import React, { Component } from 'react'

import ProgressBar from './ProgressBar'

require('styles/_servicesPage/priceCalc.css')

export default class PriceCalculator extends Component {

  componentWillMount() {
    this.state = {
      arr: []
    }
  }

  minimizeDiv() {
    this.props.toggleDiv(false)
  }


  returnDiv(){
    return
      <div>
        <p>
          Printing out text!
        </p>
      </div>
  }

  render() {
    var styleVar = {
      backgroundImage: 'url(assets/images/services/pricecalc_blue_bg.svg)',
      backgroundPosition: 'right center'
    }

    return (
      <div className="service-form" id="priceCalc" style={styleVar}>

        <div>
          <h1>Priskalkyl för badrum</h1>
          <p>
            Välkommen att fylla i formuläret,
            så är du ett steg närmare dina drömmars badrum.
          </p>
        </div>

        {this.returnDiv}

        <div onClick={this.minimizeDiv.bind(this)} className="minimizeBorder">
          <img src="assets/arrows/minimizeArrow.svg"/>
          <p>Minimera</p>
          <img src="assets/arrows/minimizeArrow.svg"/>
        </div>

      </div>
    )
  }
}

3 个答案:

答案 0 :(得分:0)

this.returnDiv只是函数的引用。你没有调用它,这就是为什么它不返回任何东西。这是你可以做的两件事:

  1. returnDiv成为一个吸气者,并像使用它一样使用它({this.returnDiv}):

    get returnDiv() {
        return (
            <div><p>Printing out text!</p></div>
        )
    }
    
  2. returnDiv称为函数:{this.returnDiv()}

  3. 更新:这是一个显示不同选择的小提琴:https://jsfiddle.net/5tsu4df1/

答案 1 :(得分:0)

调用returnDiv,同时将返回的多行jsx保留在括号内,否则可能返回null;

    import React, { Component } from 'react'

    import ProgressBar from './ProgressBar'

    require('styles/_servicesPage/priceCalc.css')

    export default class PriceCalculator extends Component {

      componentWillMount() {
        this.state = {
          arr: []
        }
      }

      minimizeDiv() {
        this.props.toggleDiv(false)
      }


      returnDiv(){
        return (
          <div>
            <p>
              Printing out text!
            </p>
          </div>
        )
      }

      render() {
        var styleVar = {
          backgroundImage: 'url(assets/images/services/pricecalc_blue_bg.svg)',
          backgroundPosition: 'right center'
        }
        var returnDiv = this.returnDiv();

        return (
          <div className="service-form" id="priceCalc" style={styleVar}>

            <div>
              <h1>Priskalkyl för badrum</h1>
              <p>
                Välkommen att fylla i formuläret,
                så är du ett steg närmare dina drömmars badrum.
              </p>
            </div>

            {returnDiv}

            <div onClick={this.minimizeDiv.bind(this)} className="minimizeBorder">
              <img src="assets/arrows/minimizeArrow.svg"/>
              <p>Minimera</p>
              <img src="assets/arrows/minimizeArrow.svg"/>
            </div>

          </div>
        )
      }
    }

答案 2 :(得分:0)

当您通过函数渲染div时,div的意图和位置很重要。

renderDiv() {
  return (<div>
          </div>)
}

工作但不是

renderDiv() {
  return 
      (<div>
      </div>)
}