在 React 函数式组件中访问 Refs
Posted
技术标签:
【中文标题】在 React 函数式组件中访问 Refs【英文标题】:Accessing Refs in React Functional Component 【发布时间】:2020-03-11 08:01:24 【问题描述】:我正在使用this 包将信用卡添加到我的应用程序中,当在功能组件中使用它时,您将如何访问示例中的引用?
这是它们显示更新值的方式:
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>
);
【问题讨论】:
【参考方案1】:你需要使用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>
);
【讨论】:
请更新您对此的回答,然后我可以将其标记为正确:这有效:CCInput.current.setValues(...) 感谢您的回答,没想到 useRefs 这么简单!以上是关于在 React 函数式组件中访问 Refs的主要内容,如果未能解决你的问题,请参考以下文章
React面向组件编程 - 基本理解和使用 - 组件三大核心属性state-props-refs - 事件处理 - 非受控组件 - 受控组件 - 高阶函数 - 函数柯里化