首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react-dates <DateRangePicker /> onFocusChange函数无效属性警告

react-dates <DateRangePicker /> onFocusChange函数无效属性警告
EN

Stack Overflow用户
提问于 2019-10-04 22:54:00
回答 1查看 2.1K关注 0票数 1

单击开始和结束日期输入时出现此错误:

代码语言:javascript
复制
Warning: Failed prop type: Invalid prop `focusedInput` of value `[object Object]` supplied to `withStyles(DateRangePicker)`, expected one of ["startDate","endDate"].

以下是我尝试过的方法:

为react-dates包创建了一个包装组件:

代码语言:javascript
复制
const ReactDatesWrapper = (props) => {

    if (props.pickerType === 'single') {
        return (
            <div className={styles.wrapper}>
                <SingleDatePicker
                    displayFormat={() => "DD/MM/YYYY"}
                    date={props.singleDate}
                    onDateChange={props.onDateChange}
                    focused={props.focused}
                    onFocusChange={props.onFocusChange}
                    id={props.uniqueId}
                    numberOfMonths={1}
                />
            </div>
        )
    }

    return (
        <div className={styles.wrapper}>
            <DateRangePicker
                displayFormat={() => "DD/MM/YYYY"}
                startDateId={props.startDateId}
                endDateId={props.endDateId}
                startDate={props.startDate}
                endDate={props.endDate}
                onDatesChange={props.onDatesChange}
                focusedInput={props.focusedInput}
                onFocusChange={props.onFocusChange}
                numberOfMonths={1}
            />
        </div>
    )
}

将其导入到我的index.js中,并编写了以下两个函数和挂钩:

代码语言:javascript
复制
const [startDate, setStartDate] = useState(moment());
const [endDate, setEndDate] = useState(moment());
const [focusedInput, setFocusedInput] = useState(null);

const rangeDatesChangeHandler = ({ startDate, endDate }) => {
  setStartDate(moment(startDate));
  setEndDate(moment(endDate));
}

const onFocusChangeRangeHandler = (focusedInput) => {
  setFocusedInput({ focusedInput });
}

最后,我使用这些函数作为道具:

代码语言:javascript
复制
<ReactDatesWrapper
    startDateId="start-date"
    endDateId="end-date"
    onDatesChange={rangeDatesChangeHandler}
    onFocusChange={onFocusChangeRangeHandler}
    focusedInput={focusedInput}
    startDate={startDate}
    endDate={endDate}
    uniqueId="range-picker"
/>

然而,我似乎得到了一个警告和日历本身,如果没有从输入下拉:

代码语言:javascript
复制
Warning: Failed prop type: Invalid prop `focusedInput` of value `[object Object]` supplied to `withStyles(DateRangePicker)`, expected one of ["startDate","endDate"].

我已经让单一日期选择器版本通过使用这些钩子/函数来通过类似的方法工作:

代码语言:javascript
复制
const [date, setDate] = useState(moment());
const [focused, setFocused] = useState(false);

// Single date picker functions

const singleDateChangeHandler = (date) => {
    setDate(moment(date));
}

const onFocusChangeHandler = ({ focused }) => {
    setFocused(focused);
}

<ReactDatesWrapper
    pickerType="single"
    singleDate={date}
    onDateChange={singleDateChangeHandler}
    onFocusChange={onFocusChangeHandler}
    focused={focused}
    uniqueId="single-picker"
/>

我的想法是这可能是因为

代码语言:javascript
复制
const [focusedInput, setFocusedInput] = useState(null);

钩子和

代码语言:javascript
复制
const onFocusChangeRangeHandler = (focusedInput) => {
   setFocusedInput({ focusedInput });
}

函数?

非常感谢您的帮助。

预期结果是能够同时更改开始日期和结束日期。

EN

回答 1

Stack Overflow用户

发布于 2019-10-04 23:10:33

结果是,将onFocusChangeRangeHandler函数从:

代码语言:javascript
复制
const onFocusChangeRangeHandler = (focusedInput) => {
  setFocusedInput({ focusedInput });
}

代码语言:javascript
复制
const onFocusChangeRangeHandler = (focusedInput) => {
    setFocusedInput(focusedInput);
}

修复了问题。将focusedInput状态设置为对象是问题所在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58238777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档