React native 使用可重用的函数组件对本机条件样式onFocus onBlur作出反应
我有一个可重用的文本输入组件,使用我在许多屏幕上使用的Native Base,目标是当文本输入在焦点上时,边框的颜色将更改为#6852E1。启用“模糊”时,它将更改为#8b 下面的代码不符合我的要求,或者我的代码有问题。我怎样才能做到这一点?谢谢 这是密码React native 使用可重用的函数组件对本机条件样式onFocus onBlur作出反应,react-native,native-base,React Native,Native Base,我有一个可重用的文本输入组件,使用我在许多屏幕上使用的Native Base,目标是当文本输入在焦点上时,边框的颜色将更改为#6852E1。启用“模糊”时,它将更改为#8b 下面的代码不符合我的要求,或者我的代码有问题。我怎样才能做到这一点?谢谢 这是密码 import React, { useState } from "react"; import { Dimensions } from "react-native"; import { Item, In
import React, { useState } from "react";
import { Dimensions } from "react-native";
import { Item, Input, Label, Icon } from "native-base";
import * as Font from "expo-font";
let borderColor;
// prettier-ignore
Font.loadAsync({
Calibre_Regular: require("../assets/fonts/Calibre-Regular.ttf"),
"Calibre_Regular": require("../assets/fonts/Calibre-Regular.ttf"),
});
const CustomTextInput = ({
value,
onChangeText,
label,
onSubmitEditing,
getRef,
onPress,
onPress2,
returnKeyType,
keyboardType,
editable,
secureTextEntry,
iconName,
iconName2,
whichStyle,
defaultValue,
}) => {
const { itemStyle1, itemStyle2, textInput, floatingLabel } = InputFieldStyles;
return (
<Item
floatingLabel
style={whichStyle ? itemStyle2 : itemStyle1}
onPress={onPress2}
>
<Icon style={{ marginLeft: 10, color: "#8B8B8B" }} name={iconName2} />
<Label style={floatingLabel}>{label}</Label>
<Input
onBlur={() => (borderColor = "#8B8B8B")}
onFocus={() => (borderColor = "#6852E1")}
style={textInput}
blurOnSubmit={false}
getRef={getRef}
value={value}
defaultValue={defaultValue}
editable={editable}
onChangeText={onChangeText}
onSubmitEditing={onSubmitEditing}
returnKeyType={returnKeyType}
keyboardType={keyboardType}
secureTextEntry={secureTextEntry}
/>
<Icon name={iconName} onPress={onPress} />
</Item>
);
};
const InputFieldStyles = {
textInput: {
padding: 10,
marginVertical: 10,
fontSize: 16,
color: "rgba(0, 0, 0, 0.87)",
fontFamily: "Calibre_Regular",
},
floatingLabel: {
marginLeft: 10,
marginTop: 8,
fontFamily: "Calibre_Regular",
},
itemStyle1: {
marginLeft: 0,
backgroundColor: "#FFF",
borderColor: borderColor,
// borderColor: "#6852E1",
// borderColor: "#8B8B8B",
borderBottomWidth: 3,
},
itemStyle2: {
marginLeft: 0,
backgroundColor: "#F6F7FC",
borderColor: borderColor,
borderBottomWidth: 3,
},
itemStyle3: {
marginLeft: 0,
backgroundColor: "#FFF",
borderColor: "#6852E1",
borderBottomWidth: 3,
},
};
export { CustomTextInput };
import React,{useState}来自“React”;
从“react native”导入{Dimensions};
从“本机库”导入{Item,Input,Label,Icon};
从“expo字体”导入*作为字体;
让我们用颜色;
//漂亮的忽略
Font.loadAsync({
Calibre_Regular:require(“../assets/fonts/Calibre Regular.ttf”),
“Calibre_Regular”:要求(../assets/fonts/Calibre Regular.ttf”),
});
常量CustomTextInput=({
价值
一旦更改文本,
标签,
在submitediting上,
getRef,
新闻界,
新闻二,,
返回键类型,
键盘式,
可编辑,
secureTextEntry,
我的名字,
iconName2,
哪种风格,
默认值,
}) => {
const{itemStyle1,itemStyle2,textInput,floatingLabel}=InputFieldStyles;
返回(
{label}
(borderColor=“#8b”)}
onFocus={()=>(borderColor=“#6852E1”)}
样式={textInput}
blurOnSubmit={false}
getRef={getRef}
value={value}
defaultValue={defaultValue}
可编辑={editable}
onChangeText={onChangeText}
onSubmitEditing={onSubmitEditing}
returnKeyType={returnKeyType}
keyboardType={keyboardType}
secureTextEntry={secureTextEntry}
/>
);
};
常量输入字段样式={
文本输入:{
填充:10,
玛吉:10,
尺寸:16,
颜色:“rgba(0,0,0,0.87)”,
fontFamily:“常规口径”,
},
浮动标签:{
边缘左:10,
玛金托普:8,
fontFamily:“常规口径”,
},
itemStyle1:{
marginLeft:0,
背景颜色:“FFF”,
borderColor:borderColor,
//边框颜色:#6852E1“,
//边框颜色:#8b“,
边界宽度:3,
},
itemStyle2:{
marginLeft:0,
背景颜色:“F6F7FC”,
borderColor:borderColor,
边界宽度:3,
},
itemStyle3:{
marginLeft:0,
背景颜色:“FFF”,
边框颜色:#6852E1“,
边界宽度:3,
},
};
导出{CustomTextInput};
这是我的代码,为那些需要帮助的人提供了正确答案
import React, { useState } from "react";
import { Dimensions } from "react-native";
import { Item, Input, Label, Icon } from "native-base";
import * as Font from "expo-font";
// prettier-ignore
Font.loadAsync({
Calibre_Regular: require("../assets/fonts/Calibre-Regular.ttf"),
"Calibre_Regular": require("../assets/fonts/Calibre-Regular.ttf"),
});
const CustomTextInput = ({
value,
onChangeText,
label,
onSubmitEditing,
getRef,
onPress,
onPress2,
returnKeyType,
keyboardType,
editable,
secureTextEntry,
iconName,
iconName2,
whichStyle,
defaultValue,
}) => {
const { itemStyle1, itemStyle2, textInput, floatingLabel } = InputFieldStyles;
const [isFocused, setIsFocused] = useState(false);
return (
<Item
floatingLabel
style={whichStyle ? itemStyle2 : itemStyle1({ isFocused })}
onPress={onPress2}
>
<Icon style={{ marginLeft: 10, color: "#8B8B8B" }} name={iconName2} />
<Label style={floatingLabel}>{label}</Label>
<Input
onBlur={() => setIsFocused(false)}
onFocus={() => setIsFocused(true)}
style={textInput}
blurOnSubmit={false}
getRef={getRef}
value={value}
defaultValue={defaultValue}
editable={editable}
onChangeText={onChangeText}
onSubmitEditing={onSubmitEditing}
returnKeyType={returnKeyType}
keyboardType={keyboardType}
secureTextEntry={secureTextEntry}
/>
<Icon name={iconName} onPress={onPress} />
</Item>
);
};
const InputFieldStyles = {
textInput: {
padding: 10,
marginVertical: 10,
fontSize: 16,
color: "rgba(0, 0, 0, 0.87)",
fontFamily: "Calibre_Regular",
},
floatingLabel: {
marginLeft: 10,
marginTop: 8,
fontFamily: "Calibre_Regular",
},
itemStyle1: ({ isFocused }) => ({
marginLeft: 0,
backgroundColor: "#FFF",
borderColor: isFocused ? "#6852E1" : "#8B8B8B",
borderBottomWidth: 3,
}),
itemStyle2: {
marginLeft: 0,
backgroundColor: "#F6F7FC",
borderBottomWidth: 3,
},
itemStyle3: {
marginLeft: 0,
backgroundColor: "#FFF",
borderColor: "#6852E1",
borderBottomWidth: 3,
},
};
export { CustomTextInput };
import React,{useState}来自“React”;
从“react native”导入{Dimensions};
从“本机库”导入{Item,Input,Label,Icon};
从“expo字体”导入*作为字体;
//漂亮的忽略
Font.loadAsync({
Calibre_Regular:require(“../assets/fonts/Calibre Regular.ttf”),
“Calibre_Regular”:要求(../assets/fonts/Calibre Regular.ttf”),
});
常量CustomTextInput=({
价值
一旦更改文本,
标签,
在submitediting上,
getRef,
新闻界,
新闻二,,
返回键类型,
键盘式,
可编辑,
secureTextEntry,
我的名字,
iconName2,
哪种风格,
默认值,
}) => {
const{itemStyle1,itemStyle2,textInput,floatingLabel}=InputFieldStyles;
const[isFocused,setIsFocused]=useState(false);
返回(
{label}
setIsFocused(假)}
onFocus={()=>setIsFocused(true)}
样式={textInput}
blurOnSubmit={false}
getRef={getRef}
value={value}
defaultValue={defaultValue}
可编辑={editable}
onChangeText={onChangeText}
onSubmitEditing={onSubmitEditing}
returnKeyType={returnKeyType}
keyboardType={keyboardType}
secureTextEntry={secureTextEntry}
/>
);
};
常量输入字段样式={
文本输入:{
填充:10,
玛吉:10,
尺寸:16,
颜色:“rgba(0,0,0,0.87)”,
fontFamily:“常规口径”,
},
浮动标签:{
边缘左:10,
玛金托普:8,
fontFamily:“常规口径”,
},
itemStyle1:({isFocused})=>({
marginLeft:0,
背景颜色:“FFF”,
borderColor:isFocused?#6852E1:“#8B”,
边界宽度:3,
}),
itemStyle2:{
marginLeft:0,
背景颜色:“F6F7FC”,
边界宽度:3,
},
itemStyle3:{
marginLeft:0,
背景颜色:“FFF”,
边框颜色:#6852E1“,
边界宽度:3,
},
};
导出{CustomTextInput};
试试这个:
const CustomTextInput = () => {
const [isFocused, setIsFocused] = setState(false);
return (
/** ... */
<Item style={itemStyle({ isFocused })}>
>
<Input
onFocus={() => setIsFocused(true)}
onBlur={() => setIsFocused(false)}
/>
</Item>
/** ... */
);
};
itemStyle: ({ isFocused }) => ({
borderColor: isFocused ? 'focused-color' : 'unfocused-color'
}),
constCustomTextInput=()=>{
常数[isFocused,setIsFocused]=setState(false);
返回(
/** ... */
>
setIsFocused(真)}
onBlur={()=>setIsFocused(false)}
/>
/** ... */
);
};
itemStyle:({isFocused})=>({
边框颜色:聚焦?“聚焦颜色”:“未聚焦颜色”
}),
是的,这是我想要的,我会编辑帖子并添加回答的代码,非常感谢!