reactjs - 在 React 函数式组件中访问 Refs
问题描述
我使用这个包将信用卡添加到我的应用程序中,当在功能组件中使用它时,你将如何访问示例中的引用?
这是他们显示更新值的方式:
this.refs.CCInput.setValues({ number: "4242" });
我不知道如何在功能组件中访问它?
这是我编辑卡片的组件,我想将当前值添加到输入中。
import React, {useContext, useState, useRef} from 'react';
import {Text, View, StyleSheet, TouchableOpacity} from 'react-native';
import {CreditCardInput} from 'react-native-input-credit-card';
import Store from '../../store/context';
const styles = StyleSheet.create({
});
export default function EditCard(props) {
const {navigate} = props.navigation;
const {cardNumber} = props.navigation.state.params;
const {state, dispatch} = useContext(Store);
const [card, setCard] = useState(
state.cards.find(card => {
return card.values.number === cardNumber;
}),
);
const _onChange = form => {
if (form.valid) {
setCard(form);
}
};
const updateCard = () => {
dispatch({
type: 'ADD_CARD',
payload: card,
});
navigate.goBack();
};
return (
<View style={styles.container}>
<CreditCardInput
validColor={'#47B278'}
invalidColor={'#E23C3C'}
placeholderColor={'#efefef'}
onChange={_onChange}
requiresName
/>
<TouchableOpacity
style={
card
? card.valid
? styles.button
: styles.buttonDisabled
: styles.buttonDisabled
}
disabled={card ? (card.valid ? false : true) : true}
onPress={updateCard}>
<Text style={styles.buttonText}>Update Credit Card</Text>
</TouchableOpacity>
</View>
);
}
解决方案
你需要使用useRef
钩子:
const cciRef = useRef();
<CreditCardInput ref={cciRef}/>;
// cciRef.current holds the reference
export default function EditCard(props) {
const cciRef = useRef();
useEffect(() => {
console.log(cciRef.current);
cciRef.current.setValues({ number: "4242" });
}, []);
return (
<View style={styles.container}>
<CreditCardInput ref={cciRef} />
</View>
);
}
推荐阅读
- php - 如何修复代码的第二部分?
- javascript - 我有 contenteditable div ,它里面是一个不可编辑的跨度,如何能够通过跨度文本长按来标记 div 的文本
- parsing - 解析 PDF 数据时如何考虑语法空白?
- android - SSD 边界框矩形缩放
- routes - BottomNavigationBar 保存偏移位置并导航到细节颤动
- eclipse - Eclipse 2018-12 是否适用于 32 位 Windows 或 Linux?
- django - 在 Django 中测试全文搜索的触发器
- java - 收到“javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted”这个错误
- java - BeanDefinitionStoreException:IOException 从类路径资源 [applicationContext] 解析 XML 文档
- c - (C) Scanf - 输入每次都为 0