2017-04-03 1 views
3

Rebel JS와 Babel and 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"을 제거합니다. I는 value을 제거하면

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; 
} 

구체적으로는 제 node.value 라인 참조 (또는 처음 두 node.value 라인 : 상기 조사 결과

는 에러 참조 ReactDOMInput.js의 다음 섹션 내 포인트 속성).

색상 코드가 올바른 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 이벤트의 이벤트 매개 변수를 기록하고 어떤 일이 발생하는지 확인할 수 있습니까? 또한 입력을 제거하고 여전히 입력되는지 확인하십시오. –

관련 문제