Javascript 如何在样式表之外更改样式表属性?自然反应
我举了一个例子:Javascript 如何在样式表之外更改样式表属性?自然反应,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我举了一个例子: import React from 'react'; import { StyleSheet, Text, View, TouchableOpacity } from 'react-native'; export default function App() { const handlePress = e => { styles.button.borderColor = '#FF0000'; }; return ( <View sty
import React from 'react';
import { StyleSheet, Text, View, TouchableOpacity } from 'react-native';
export default function App() {
const handlePress = e => {
styles.button.borderColor = '#FF0000';
};
return (
<View style={styles.container}>
<TouchableOpacity style={styles.button} onPress={handlePress}>
<Text style={styles.text}>Example</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center'
},
button: {
borderWidth: 10,
borderColor: '#000000',
borderRadius: 15,
backgroundColor: '#8a2be2',
width: 125,
height: 125,
justifyContent: 'center',
alignItems: 'center'
},
text: {
color: '#fff',
fontSize: 25
}
});
从“React”导入React;
从“react native”导入{样式表、文本、视图、TouchableOpacity};
导出默认函数App(){
常数手柄压力=e=>{
styles.button.borderColor='#FF0000';
};
返回(
例子
);
}
const styles=StyleSheet.create({
容器:{
弹性:1,
背景颜色:“#fff”,
对齐项目:“居中”,
为内容辩护:“中心”
},
按钮:{
边框宽度:10,
边框颜色:'#000000',
边界半径:15,
背景颜色:“#8a2be2”,
宽度:125,
身高:125,
为内容辩护:“中心”,
对齐项目:“中心”
},
正文:{
颜色:“#fff”,
尺寸:25
}
});
我试图更改按钮borderColor的值,调用函数来执行此操作,但出现了一个错误,错误是:“试图分配给只读属性”您需要更改
状态
。为此,您可以使用使用状态
,导入它,然后在按下时更改状态:
import React,{useState}来自“React”;
从“react native”导入{样式表、文本、视图、TouchableOpacity};
导出默认函数App(){
const[buttonClicked,setButtonClicked]=useState(false)
常数手柄压力=e=>{
setButtonClicked(真)
};
返回(
例子
);
}
触发onPress事件时,您似乎正在尝试编辑styles对象。相反,您需要编辑事件处理程序传递的事件对象的样式,在本例中,它将是元素。“样式”对象用于在加载构件时应用样式,但在此之后,您需要编辑图元本身的实例
在handlePress功能中,如果您console.log(e.target)
,您应该会看到在触发press事件后打印到控制台上的元素。您将能够看到与其关联的所有属性,其中一个属性是style。这是要更改的样式属性。像这样:
let obj = e.target;
obj.style.borderColor = '#FF0000';
查看事件处理程序发生了什么的一个好方法是只记录从事件中获取的对象。你会明白你是否得到了正确或不正确的对象,并开始看到你可以用它做的所有事情。活动是一个有很多选择的大世界。如果有疑问,请访问console.log 仍然有相同的错误,但没有任何改变:@chairash-state在这里不一定需要。这取决于用例,但他没有以正确的方式编辑事件对象的样式,正如我在回答中所说的那样。状态是一个选项,但这似乎太简单了,不需要状态,特别是当有多个按钮时。您不希望为页面上的每个按钮维护边框颜色的状态。我尝试了此操作,正如您所看到的,此操作对Web有效,但当您尝试在Android设备中运行时,会出现以下错误:Undefined不是对象(评估“obj.style.borderColor=”#FF0000“)