2017-04-03 6 views
3

React JSとBabelとWebpackを使用しています。React JSでカラーコントロールを使用する際の警告

The specified value "" does not conform to the required format. The format is "#rrggbb" where rr, gg, bb are two-digit hexadecimal numbers.

私のコードは次のとおりです。:

import React from 'react'; 

class EditDetails extends React.Component { 


    constructor(props) { 
     super(props); 
     this.state = { 
      bg: "#ffffff" 
     }; 
    } 

    handleChange(event) { 
     const target = event.target; 
     const value = target.type === 'checkbox' ? target.checked : target.value; 
     const id = target.id; 

      this.setState({ 
       [id]: value 
      }); 
    } 




    render() { 
     return (
      <div> 
       <form> 
        <div>Background Colour:<input id="bg" type="color" onChange={this.handleChange.bind(this)} value="#dddddd" /></div> 
        </form> 
      </div> 
    ) 
    } 
} 

export default EditDetails; 

もしすべてが私の他のスクリプトカラーモジュールを使用するものも含め、しかし、私のスクリプトのいずれかは私に次のエラーを与えているとうまく働いています私はvalue="#dddddd"を私の入力タグから削除します。実際には同じエラーメッセージを2度与えます。誤差基準がReactDOMInput.jsの次のセクションに私を指し、さらに調査すると

は、:

switch (props.type) { 
    case 'submit': 
    case 'reset': 
    break; 
    case 'color': 
    case 'date': 
    case 'datetime': 
    case 'datetime-local': 
    case 'month': 
    case 'time': 
    case 'week': 
    // This fixes the no-show issue on iOS Safari and Android Chrome: 
    // https://github.com/facebook/react/issues/7233 
    node.value = ''; 
    node.value = node.defaultValue; 
    break; 
    default: 
    node.value = node.value; 
    break; 
} 

Iはvalueを削除すると具体的には、最初node.valueライン(又は最初の二つnode.value行を参照され属性)。

カラーコードを正しい16進数形式にしていると、このエラーが発生するのはなぜですか?

注:実際には、正しい色がカラーコントロールで正しく設定されているように見えます。

+0

'this.setState({[ID]:'#$ {値} '}); 'または#で色を書き込みます。 –

+0

@RafaelBerroこれは、カラーコントロールが#記号を提供するので、正しいとは思われません。また、初期レンダリング時にエラーが発生し、その後の値の変更では発生しません。 – kojow7

+0

どこにbgの状態を適用していますか? –

答えて

0

このように、クラスコンストラクタで関数をバインドしてみてください。

import React, { Component } from 'react'; 
 

 
export default class EditDetails extends Component { 
 

 
    constructor(props) { 
 
    super(props); 
 
    this.state = { bg: '#ffffff' }; 
 
    this.handleChange = this.handleChange.bind(this); 
 
    } 
 

 
    handleChange(event) { 
 
    const { target } = event; 
 
    const { id, value } = target; 
 

 
    this.setState(
 
     { [id]: value } 
 
    ); 
 
    } 
 
    
 
    render() { 
 
    return (
 
     <form> 
 
     <div> 
 
      <input id='bg' type='color' onChange={this.handleChange} value={this.state.bg} /> 
 
     </div> 
 
     </form> 
 
    ) 
 
    } 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

+0

私はあなたが示唆したように変更を加えましたが、それは何の違いもありませんでした。あなたのアプローチは私のアプローチに代わるものだと思います。また、ES6クラスでgetInitialStateを使用しているのはなぜですか?コンストラクタで状態を定義してはいけませんか? – kojow7

+0

また、onChange属性を完全に削除しても、同じエラーが発生してもonChange関数とは何の関係もないと信じられています。 – kojow7

+0

このコードでエラーが発生していませんか? handleChangeイベントのイベントパラメータをログに記録し、何が起こるかを確認できますか?また、入力を削除し、それがまだ起こっているかどうかを確認してください。 –

関連する問題