我正在学习 TypeScript 和 React,当我遇到这段代码时,我发现!(非空断言)和?.(可选链接)都可以使用。
import { FC, FormEvent, useRef } from "react";
const NewTodo: FC = () => {
const textInputRef = useRef<HTMLInputElement>(null);
function todoSubmitHandler(ev: FormEvent) {
ev.preventDefault();
// v here v
const enteredText = textInputRef.current!?.value;
console.log(enteredText);
}
return (
<form onSubmit={todoSubmitHandler}>
<div>
<label htmlFor="todo-text">Todo Text</label>
<input type="text" id="todo-text" ref={textInputRef} />
</div>
<button type="submit">ADD TODO</button>
</form>
);
};
export default NewTodo;
Run Code Online (Sandbox Code Playgroud)
我所知道的!是,它告诉 Typescript 这个值永远null不是 Nor undefined。另一方面,?.用于防止未找到属性时出现错误,而是返回undefined。在上面的示例中,我可以使用其中一个! …
我想在这里问问题,我已经使用平移响应器制作了可拖动视图。我设法让它只能上下移动。这是我的泛响应器配置
this.panResponder = PanResponder.create({
onStartShouldSetPanResponder: (event, gesture) => true,
// THIS TRACK MOVEMENT OF OUR FINGER
onPanResponderMove: (event, gesture) => {
if (gesture.dy > 0) {
this.position.setValue({ y: gesture.dy });
}
},
onPanResponderRelease: (event, gesture) => {
if (gesture.dy > SWIPE_THRESHOLD) {
this.forceSwipeDown();
} else {
this.resetPosition();
}
},
});
Run Code Online (Sandbox Code Playgroud)
我在animated.view中使用它,这是代码
<Animated.View
style={[modalCard, this.position.getLayout()]}
{...this.panResponder.panHandlers}
>
{
// XButton
}
<TouchableOpacity style={button} onPress={() => this.props.closeModal()}>
<Icon
name='times'
size={wp(20)}
color='#A9A9A9'
/>
</TouchableOpacity>
<View style={topBorders}>
<View style={doubeLine} />
</View>
{this.props.children}
</Animated.View>
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我将 …