【问题标题】:React native specific style item in map在地图中反应原生特定样式项目
【发布时间】:2018-05-10 15:16:50
【问题描述】:

我有这个代码可以生成来自 API 的大小按钮,例如 (al, l, m, s ... ),当用户单击一个圆圈时,我需要放置一个特定的样式,我已经尝试过这个代码,但是它为所有圆圈制作相同的样式,单击它时我需要更改一个圆圈的样式:

<View style={{ paddingTop: 10, width: "49%" }}>
                <View style={styles.sizeView}>
                  <View style={styles.sizeView3}>
                    <Text style={styles.chartText}>{t("size")}</Text>
                  </View>
                </View>
                <View style={styles.sizeButtons}>
                  {this.state.productsList[0].sizes.map((item, index) => {
                    return (
                      <TouchableOpacity
                        key={index}
                        onPress={() => this.toggle1(item)}
                        style={
                          !this.state.pressStatus
                            ? styles.sizes
                            : styles.sizesAlt
                        }
                        onHideUnderlay={this._onHideUnderlay.bind(this)}
                        onShowUnderlay={this._onShowUnderlay.bind(this)}
                      >
                        <Text
                          key={index}
                          style={
                            !this.state.toggle1 ? {} : { color: "#EC1C24" }
                          }
                        >
                          {item}
                        </Text>
                      </TouchableOpacity>
                    );
                  })}
                </View>
              </View>

我拖动图片查看结果

【问题讨论】:

  • 你能上传你所有的组件代码吗?
  • @VahidBoreiri 我更新了它,这个是 toogle1 函数:toggle1(size) { this.setState({ size }); }
  • 你只是在你的onPress={() =&gt; this.toggle1(item)} 中给它红色#EC1C24。你不会改变它的颜色。你只是在改变大小。
  • 不,所有圆圈都没有红色边框,当用户单击这些圆圈时,我需要更改样式,仅针对单击的一个圆圈。单击其中一个时,我的代码会更改所有圆圈的样式! :(@OrthoHomeDefense
  • 我只是指出错误。而不是style={ !this.state.toggle1 ? {} : { color: "#EC1C24" } } 您需要在onPress 事件中更改该元素的样式

标签: javascript css react-native coding-style react-redux


【解决方案1】:

问题是您正在使用一个变量来更改所有按钮的切换状态(this.state.toggle1),所以如果一个是切换的,它们都会被切换,因为我认为这不是预期的行为。 我建议为按钮创建一个纯组件,以便每个按钮都有自己的状态并独立处理切换。

至于风格,它们是 2 语法工作:

 style={  !this.state.toggle ? {} : { color: "#EC1C24", backgroundColor: 'red' }}

  style={[ this.state.toggle && {color: "#EC1C24", backgroundColor: 'red'} ]}

所以先为圆形按钮创建一个组件

export class CircleButton extends Component {
  constructor(props) {
     super(props);
     this.state = {
       toggled: false
     };
 }
 render() {
   return (
      <TouchableOpacity
                    key={index}
                    onPress={() => this.toggle1(item)}
                    style={
                      !this.state.pressStatus
                        ? styles.sizes
                        : styles.sizesAlt
                    }
                    onHideUnderlay={this.props.onHideUnderlay.bind(this)}
                    onShowUnderlay={this.props.onShowUnderlay.bind(this)}
                  >
                    <Text
                      key={index}
                      style={
                        !this.state.toggle ? {} : { color: "#EC1C24" }
                      }
                    >
                      {item}
                    </Text>
      </TouchableOpacity>
   );
 }
}

并将您的视图更改为这样的内容

        <View style={{ paddingTop: 10, width: "49%" }}>
            <View style={styles.sizeView}>
              <View style={styles.sizeView3}>
                <Text style={styles.chartText}>{t("size")}</Text>
              </View>
            </View>
            <View style={styles.sizeButtons}>
              {this.state.productsList[0].sizes.map((item, index) => {
                return (
                  <CircleButton  
                     onHideUnderlay={this._onHideUnderlay.bind(this)}
                     onShowUnderlay={this._onShowUnderlay.bind(this)}/>
                );
              })}
            </View>
          </View>

【讨论】:

  • 不,不是这样,所有圆圈都没有红色边框,当用户单击这些圆圈时,我需要更改样式,仅针对单击的一个圆圈。单击其中一个时,我的代码会更改所有圆圈的样式! :(
  • 我编辑了答案以包含一个如何做到这一点的示例!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 2021-01-01
  • 1970-01-01
相关资源
最近更新 更多