我自己写了一个车牌输入键盘组件,写到一半出了问题。点击输入框,弹出键盘,选好内容,然后 setstate更新,state已经更新但render没有刷新,点击下一个输入框才会改变
class KeyBoard extends PureComponent {
state={
input_items: [
{label:"firstNumber", value: ""},
{label:"secondNumber", value: ""},
{label:"thirdNumber", value: ""},
{label:"fourthNumber", value: ""},
{label:"fifthNumber", value: ""},
{label:"sixthNumber", value: ""},
{label:"seventhNumber", value: ""},
],
isNewEnergy: false,
carTxt: [
{ label: 1, name: ["粤", "京", "冀", "沪", "津", "晋", "蒙", "辽", "吉", "黑"] },
{ label: 2, name: ["苏", "浙", "皖", "闽", "赣", "鲁", "豫", "鄂", "湘", "桂"] },
{ label: 3, name: ["琼", "渝", "川", "贵", "云", "藏", "陕", "甘", "青", "宁"] },
],
carNum: [
{ label: 1, name: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] },
{ label: 2, name: ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K"] },
{ label: 3, name: ["L", "M", "N", "P", "Q", "R", "S", "T", "U", "V"] },
],
isFirstNumber: { label: 4, name: ["新", "临"] },
isMiddleNumber: { label: 4, name: ["W", "X", "Y", "Z"]},
isLastNumber: { label: 4, name: ["W", "X", "Y", "Z", "港", "澳", "学"] },
currentButton: "firstNumber",
lastButton: "seventhNumber",
keyBoard: []
};
handleKeyBoard = (e) => {
const {carTxt, carNum, isFirstNumber, isLastNumber, isMiddleNumber, lastButton} = this.state;
this.setState({currentButton: e});
if (e === "firstNumber") {
const keyBoard = [...carTxt];
keyBoard.push({...isFirstNumber});
this.setState({keyBoard: keyBoard})
}else if (e === lastButton){
const keyBoard = [...carNum];
keyBoard.push({...isLastNumber});
this.setState({keyBoard: keyBoard})
} else {
const keyBoard = [...carNum];
keyBoard.push({...isMiddleNumber});
this.setState({keyBoard: keyBoard});
}
};
handleSwitchLicence = () => {
const {input_items} = this.state;
var isNewEnergy = this.state.isNewEnergy;
isNewEnergy = !isNewEnergy;
if (isNewEnergy === false) {
input_items.pop();
this.setState({input_items: input_items, lastButton: "seventhNumber"})
}else {
var lastItem = {label:"eighthNumber", value: ""};
input_items.push(lastItem);
this.setState({input_items: input_items, lastButton: "eighthNumber"})
}
this.setState({input_items: input_items,isNewEnergy});
};
handleChoose = e => {
const {input_items, currentButton} = this.state;
let i = 0;
for (i in input_items) {
if (input_items[i].label === currentButton) {
input_items[i].value = e;
}
}
this.setState({input_items});
};
render() {
console.log("render");
const {input_items,keyBoard} = this.state;
return (
<div>
<div className="input-field">
{
input_items.map(item => (
<button className="selectedButton" key={item.label} onClick={this.handleKeyBoard.bind(this, item.label)}>{item.value}</button>
))
}
</div>
<input id="licenceType" className="licence-type" type="checkbox" value="true"/>
<label className="type-label" htmlFor="licenceType" onClick={this.handleSwitchLicence}>新能源车辆</label>
<div className="boardStyle">
{
keyBoard.map(items => (
<ul key={items.label}>
{items.name.map(item => (
<li key={item} onClick={this.handleChoose.bind(this, item)}>{item}</li>
))}
</ul>
))
}
</div>
</div>
);
}
}
请各路大神看下哪儿出问题了, 万分感谢
PureComponent 改为 Component