我正在使用React JS与Babel和Webpack。我的其他脚本甚至是使用颜色模块的脚本都可以正常工作,但是,我的一个脚本给了我以下错误:
指定值“”不符合所需格式。该 格式为“#rrggbb”,其中rr,gg,bb是两位十六进制 号。
我的代码如下:
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"
,它实际上会给出相同的错误消息两次。
经过进一步调查,错误参考指向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;
}
具体而言,当我删除node.value
属性时,它指的是第一行node.value
行(或前两行value
行。)
为什么在我使用正确的十六进制格式的颜色代码时会生成此错误?
注意:确实在颜色控件中正确设置了正确的颜色。
答案 0 :(得分:2)
从技术上讲,我遇到了相同的错误,但是我认为这与onChange没有任何关系。仅仅是因为我的onChange函数与问题中的函数不同,并且我已经有与onChange一起工作的代码的不同工作版本。 问题中的一个:
handleChange(event) {
const target = event.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
const id = target.id;
this.setState({
[id]: value
});
}
对矿井:
handleChange = event => {
this.setState({ value: event.target.value });
};
无论我们onChange函数的结构不同,我们都会遇到相同的错误。
如果它可能会帮助其他人,则此版本有效:
class CheckBoxes extends React.Component {
constructor(props) {
super(props);
this.state = { color: "" };
}
handleChange = event => {
this.setState({ color: event.target.value });
};
render() {
// const [initial, setInitial] = useState("#5e72e4");
// const [color, setColor] = useState({});
return (
<div>
<input
type="color"
value={this.state.color}
onChange={this.handleChange}
/>
<div
style={{
width: 50,
height: 50,
marginBottom: 20,
backgroundColor: this.state.color
}}
></div>
<br />
{/* <InputColor initialHexColor={initial} onChange={setColor} /> */}
</div>
);
}
}
export default CheckBoxes;
基本上:当输入值更改时,div的backgroundColor也会更改。
答案 1 :(得分: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>