Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 从循环中创建的按钮中删除文本_Reactjs_React Native_React Native Android - Fatal编程技术网

Reactjs 从循环中创建的按钮中删除文本

Reactjs 从循环中创建的按钮中删除文本,reactjs,react-native,react-native-android,Reactjs,React Native,React Native Android,我正在使用react native构建应用程序 我设置了一个循环,创建每个按钮内都有字母的按钮 我希望onPress将运行功能,删除按下按钮内的字母 到目前为止,我的代码如下: let LettersBoxes = []; var test = []; for (let i = 0; i < answerlen; i++) { console.log(test) let letter = answer[mixingLetters[i]]

我正在使用react native构建应用程序 我设置了一个循环,创建每个按钮内都有字母的按钮

我希望onPress将运行功能,删除按下按钮内的字母

到目前为止,我的代码如下:

    let LettersBoxes = [];
    var test = [];
    for (let i = 0; i < answerlen; i++) {
      console.log(test)
        let letter = answer[mixingLetters[i]]
        console.log('check',letter)
        LettersBoxes.push(
            <TouchableOpacity onPress={() => this.onClick(letter, test)} style={styles.boxStyle} key={i}>
              <Image
                source={require('../../img/parchment3.gif')}
                style={{width: 40, height: 40, alignItems: 'center'}}
                >
                <View>
                  <Text
                    style={{fontSize:28, fontWeight: 'bold',}}>
                    {letter}
                  </Text>
                </View>
              </Image>
            </TouchableOpacity>
        );
      }
    return(
      <View style={styles.viewStyle}>{LettersBoxes}</View>
    )
  }
};
让LettersBoxes=[];
var检验=[];
for(设i=0;i
{字母}
);
}
返回(
{LettersBoxes}
)
}
};

有可能做我想做的事吗

如果要动态创建组件,可以使用为字母数组中的每个字母创建的按钮,执行以下操作(在渲染方法中)

在上面的结构中,如果
this.state.letters['a']
为true,则显示该字母;否则,你就不会表现出来。简单地说,映射时请执行以下操作:

const buttons = Object.keys(this.state.letters).map(letter => {
  if (this.state.letters[letter]) {
    return <Button onClick={() => onSomethingClick(letter)}>{letter}</Button>;
  }
  else { // no letter should appear, so empty content
    return <Button onClick={() => onSomethingClick(letter)}></Button>;
  }
}

如果要动态创建组件,可以使用为字母数组中的每个字母创建的按钮,执行以下操作(在渲染方法中)

在上面的结构中,如果
this.state.letters['a']
为true,则显示该字母;否则,你就不会表现出来。简单地说,映射时请执行以下操作:

const buttons = Object.keys(this.state.letters).map(letter => {
  if (this.state.letters[letter]) {
    return <Button onClick={() => onSomethingClick(letter)}>{letter}</Button>;
  }
  else { // no letter should appear, so empty content
    return <Button onClick={() => onSomethingClick(letter)}></Button>;
  }
}

你的
onClick
函数看起来怎么样?你的
onClick
函数看起来怎么样?太棒了!它的工作,现在的信真的删除了按钮,但其他按钮也被删除。。。也许我在代码中犯了一些错误?@gaidediz如果您从
this.state.letters
正确复制属性,其他按钮应该保持相同的状态。您能使用扩展运算符吗?还要确保在构造函数中定义初始状态。太好了!它的工作,现在的信真的删除了按钮,但其他按钮也被删除。。。也许我在代码中犯了一些错误?@gaidediz如果您从
this.state.letters
正确复制属性,其他按钮应该保持相同的状态。您能使用扩展运算符吗?还要确保在构造函数中定义初始状态。
const buttons = Object.keys(this.state.letters).map(letter => {
  if (this.state.letters[letter]) {
    return <Button onClick={() => onSomethingClick(letter)}>{letter}</Button>;
  }
  else { // no letter should appear, so empty content
    return <Button onClick={() => onSomethingClick(letter)}></Button>;
  }
}
onSomethingClick = (letter) => {
  this.setState({
    letters: {
      ...this.state.letters, // use Object.assign if you can't use spread operator
      [letter]: !this.state.letters[letter] // switches T to F and vice-versa
    }
  }
}