アプリにreact-datepickerを実装しました。
日付ピッカーの入力フィールドをカスタマイズして、タイトル入力などの他のカスタムフィールドに適合させたい場合を除いて、すべて問題ありません。
を介して日付ピッカーを変更すると
customInput={<Input />}
フィールドでは、外観が変更されましたが、日付を選択できなくなりました(ピッカーが機能しなくなりました)。
ここに私のコードがあります:
<DatePicker
customInput={<Input />}
dateFormat="DD.MM.YYYY"
selected=...
onChange=...
/>
何か案は?
export namespace Input {
export interface Props {
onChange: (event: any) => void;
placeholder?: string;
value?: string | number;
isSecure?: any;
id?: string;
}
// ...
}
そこで、次の方法で時計イベントを追加しました。
export namespace Input {
export interface Props {
onChange: (event: any) => void;
placeholder?: string;
value?: string | number;
isSecure?: any;
id?: string;
onClick: (event: any) => void;
}
}
そうですか?
コンポーネントコード:
export class Input extends React.Component<Input.Props, Input.State> {
public render() {
const controlClass = classNames(
[style.control]
);
const inputClass = classNames(
[style.input]
);
return (
<p className={controlClass} >
<input
id={this.props.id}
onChange={this.props.onChange}
className={inputClass}
type={this.props.isSecure ? "password" : "text"}
placeholder={this.props.placeholder}
value={this.props.value}
/>
</p>
);
}
}
Input
コンポーネントはonClick
イベントを実装し、それを小道具として利用できるようにする必要があります。これが、日付ピッカーがそれ自体を開くきっかけとなるためです。
const Input = ({onChange, placeholder, value, isSecure, id, onClick}) => (
<input
onChange={onChange}
placeholder={placeholder}
value={value}
isSecure={isSecure}
id={id}
onClick={onClick}
/>
);
const NoClickInput = ({onClick, ...props}) => <Input {...props} />;
class App extends Component {
state = {
value: moment(),
};
render() {
return (
<div>
<DatePicker
value={this.state.value}
dateFormat="DD.MM.YYYY"
customInput={<Input />}
selected={this.state.date}
onChange={date => this.setState({date})}
/>
<DatePicker
value={this.state.value}
dateFormat="DD.MM.YYYY"
customInput={<NoClickInput />} {/* Will not work */}
selected={this.state.date}
onChange={date => this.setState({date})}
/>
</div>
);
}
}
[〜#〜]編集[〜#〜]:
Input
コンポーネントの実装に触れることなく考えられる回避策は、それをコンテナーにラップし、代わりにそのクリックを処理することです。
const ClickableInput = ({onClick, ...props}) => (
<div onClick={onClick}>
<Input {...props}>
</div>
);
次に、カスタム入力としてClickableInput
の代わりにInput
を使用します。