0
点赞
收藏
分享

微信扫一扫

Jenkins入门——安装docker版的Jenkins & 配置mvn,jdk等 & 使用案例初步 & 遇到的问题及解决

gy2006_sw 2023-11-15 阅读 12

项目antd版本低,没有直接可使用的年份选择器,参考此篇(使用antd实现年份选择器控件 - 掘金)

一开始在state里设置了time:

this.state = {
    isopen: false,
    time: null
}

在类似onChange事件里this.setState({time: value}),datepicker里传value属性:

<DatePicker
{...this.props}
mode='year'
format='YYYY'
open={this.state.isopen}
value={this.state.time}  // 这里
onOpenChange={this.handleOpenChange}
onPanelChange={this.handlePanelChange}
onChange={this.clearValue}
/>

确实每次选择完选择框里的值都变了,对应页面元素:

<input readonly="" placeholder="请选择年份" class="ant-calendar-picker-input ant-input" value="">

但是,getfieldvalue时发现value是选择框显示的值,不代表fieldvalue能get到的值。

改了下直接不用time这个state,直接暴力使用setFieldsValue修改,页面选择框显示的改了,真正的取值也改了。

最终版如下:

class YearPicker extends React.Component {
    constructor(props) {
        super(props)
    
        this.state = {
            isopen: false
        }
    }
    handlePanelChange = value => {
        this.setState({isopen: false})
        this.props.onPanelChange && this.props.onPanelChange(value)
    }
    handleOpenChange = status => { 
        if (status) {
            this.setState({ isopen: true })
        } else {
            this.setState({ isopen: false })
        }
    } 
    clearValue = () => {
        this.props.onPanelChange && this.props.onPanelChange(null);
    }
    render() {
        return (
            <div>
                <DatePicker
                {...this.props}
                mode='year'
                format='YYYY'
                open={this.state.isopen}
                onOpenChange={this.handleOpenChange}
                onPanelChange={this.handlePanelChange}
                onChange={this.clearValue}
                />
            </div>
        )
    }
}

使用:
 

const onAAAPanelChange = value => {
    setFieldsValue({aaa: value});
};
const onBBBPanelChange = value => {
    setFieldsValue({bbb: value});
};
<Form.Item {...formItemLayout} label="年份">
    {getFieldDecorator('aaa', {
        initialValue: moment(),  // 有默认值的情况
        rules: [{ required: true, message: '请选择年份' }],
    })(
        <YearPicker 
        onPanelChange={onAAAPanelChange}
        style={{ width: '100%' }} 
        />
    )}
</Form.Item>

<Form.Item {...formItemLayout} label="选择时间">
    {getFieldDecorator('bbb', {
        validateTrigger: 'onBlur', 
    })(
        <YearPicker 
        placeholder="请选择年份" 
        style={{ width: '100%' }}
        onPanelChange={onBBBPanelChange}
        />
    )}
</Form.Item>

效果:

举报

相关推荐

0 条评论