state更新之后,render没有刷新

我自己写了一个车牌输入键盘组件,写到一半出了问题。点击输入框,弹出键盘,选好内容,然后 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>
        );
    }
}

请各路大神看下哪儿出问题了, 万分感谢

阅读 2.4k
1 个回答

PureComponent 改为 Component

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题