我知道在html
和javascript
能够通过css
和id
更改自己的class
样式,在本机中,如何设置/更改组件样式。我有map
组件列表,每个组件都设置了key
值。当我调用一个函数时,我想改变一个组件样式。
例如:更改key
是2组件样式
_RenderSpecialItem(){
return this.state.speciallist.map((item, i)=>{
return(
<SpecialItem
key={i}
/>
);
});
}
_ChangeStyle(){
//do something
}
答案 0 :(得分:2)
你可以使用Direct Manipulation,但这不是一个好习惯,更多请阅读
链接中的直接操纵不会成为您经常使用的工具;您通常只会使用它来创建连续动画,以避免渲染组件的开销......
。否则,您应该在组件中设置状态并更改状态以更新样式
e.g。
首先将ref设置为组件:
<SpecialItem
key={i}
ref={(thisItem) => this[`item-${i}`] = thisItem}
/>
然后setNativeProps:
_ChangeStyle() {
this['item-2'].setNativeProps({style: {/* your style here */}});
}
完整示例
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
speciallist: ['aaa', 'bbb', 'ccc']
}
}
componentDidMount() {
this['text-0'].setNativeProps({style: {fontSize: "10"}});
this['text-1'].setNativeProps({style: {fontSize: "20"}});
this['text-2'].setNativeProps({style: {fontSize: "30"}});
}
render() {
return (
<View style={styles.container}>
{
this.state.speciallist.map((item, i)=>(
<Text
key={`text-${i}`}
ref={(thisItem) => this[`text-${i}`] = thisItem}
>
{item}
</Text>
))
}
</View>
);
}
}