Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails-4 – 警告:输入是一个void元素标记,不能有`children`或使用`props.dangerouslySetInnerHTML`.检查render方法为null大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_262_1@如果对表单URL的ajax调用失败,我试图在表单中呈现错误.以下是我的管理组件:
#app/assets/javascripts/components/admin.js.coffee
@Admin = React.createClass
#  propTypes: ->
#    emailVal: React.PropTypes.String.isrequired

  geTinitialState: ->
    edit: false
    errorTexts: []

  handleToggle: (E) ->
    e.preventDefault()
    @setState edit: !@state.edit
    @setState errorTexts: []

  handledelete: (E) ->
    e.preventDefault()
    # yeah... jQuery doesn't have a $.delete shortcut method
    $.ajax
      method: 'deletE'
      url: "/admins/#{ @props.admin.id }"
      dataType: 'JSON'
      success: () =>
        @props.handledeleteAdmin @props.admins

  handleEdit: (E) ->
    e.preventDefault()
    data = email: ReactDOm.findDOMNode(@refs.email).value
    # jQuery doesn't have a $.put shortcut method either
    $.ajax
      method: 'PUT'
      async: false
      url: "/admins/#{ @props.admin.id }"
      dataType: 'JSON'
      data:
        admin: data
      error: (data,status,xhr) =>
        errorTexts = []
        for key,value of data.responseJSON
          errorText = "#{key} #{value.toString()}"
          errorTexts.push errorText
        @replaceState errorTexts: errorTexts
        @setState edit: true
      success: (data,xhr) =>
        @setState edit: false
        @props.handleEditAdmin @props.admin,data

  adminRow: ->
    dom.tr null,dom.td null,@props.admin.email
      dom.td null,dom.a
          className: 'btn btn-default'
          onClick: @handleToggle
          'Edit'
        dom.a
          className: 'btn btn-danger'
          onClick: @handledelete
          'delete'

  adminForm: ->
    dom.tr null,dom.input
          className: 'form-control'
          type: 'text'
          DefaultValue: @props.admin.email
          ref: 'email'
          for errorText,index in @state.errorTexts
            React.createElement AdminError,key: index,errorText: errorText
      dom.td null,dom.a
          className: 'btn btn-default'
          onClick: @handleEdit
          'update'
        dom.a
          className: 'btn btn-danger'
          onClick: @handleToggle
          'Cancel'

  render: ->
    if @state.edit
      @adminForm()
    else
      @adminRow()

相应的AdminError组件是:

#app/assets/javascripts/components/adminerror.js.coffee
@AdminError = React.createClass

  getDefaultProps: ->
    errorText: ""

  render: ->
    dom.div
      className: 'Help-block'
      @props.errorText

在调试时,我得到@ props.errorText的正确值为“email is invalid”.但它没有在页面上呈现,我在控制台中发出警告:“警告:输入是一个void元素标记,不能有子节点或使用props.dangerouslySeTinnerHTMl.请检查null的render方法.”
附件是错误和页面的屏幕截图.

我尝试更改AdminError组件,如下所示,但它不起作用:

#app/assets/javascripts/components/adminerror.js.coffee
@AdminError = React.createClass

  getDefaultProps: ->
    errorText: ""

  render: ->
    dom.div
      className: 'Help-block'
      dangerouslySeTinnerHTML: __html: marked(@props.errorText.toString(),{saitize: truE})

当我在返回dangerouslySeTinnerHTML的行设置一个调试点时,我正确地将@ props.errorText的值设为“email is invalid”,并将标记的值(@ props.errorText.toString())设置为“email is invalid”.但仍然没有呈现错误的帮助块.

更新:
在AdminError组件中进行了以下更改

应用程序/资产/ Java脚本/组件/ adminerror.js.coffee

@AdminError = React.createClass

  getDefaultProps: ->
#    errorText: ""
    errorTexts: []

  render: ->
    for errorText in @props.errorTexts
      dom.div
        className: 'Help-block'
        errorText

在Admin组件中,对adminform方法进行了以下更改:

if(@state.errorTexts.length>0)
            dangerouslySeTinnerHTML: {
              __html: ReactDOMServer.renderToString(
  #              for errorText,index in @state.errorTexts
                React.createElement AdminError,errorTexts: @state.errorTexts
              )
            }

没有得到警告,而是得到以下错误:

Uncaught Invariant Violation: ReactCompositeComponent.render(): A valid ReactComponent must be returned. You may have returned undefined,an array or some other invalid object.

解决方法

dom.input可能没有子元素.

但是这段代码试图将错误消息呈现为dom.input的子代:

dom.td null,dom.input
      className: 'form-control'
      type: 'text'
      DefaultValue: @props.admin.email
      ref: 'email'
      # these are being rendered as children of the input: 
      for errorText,index in @state.errorTexts
        React.createElement AdminError,errorText: errorText

你能在其他地方呈现这些错误消息吗?例如,作为输入的兄弟姐妹:

dom.td null,dom.input
      className: 'form-control'
      type: 'text'
      DefaultValue: @props.admin.email
      ref: 'email'
    for errorText,index in @state.errorTexts
      React.createElement AdminError,errorText: errorText

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails-4 – 警告:输入是一个void元素标记,不能有`children`或使用`props.dangerouslySetInnerHTML`.检查render方法为null全部内容,希望文章能够帮你解决ruby-on-rails-4 – 警告:输入是一个void元素标记,不能有`children`或使用`props.dangerouslySetInnerHTML`.检查render方法为null所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。