javascript - 如何防止嵌套映射元素触发 onClick 事件两次

标签 javascript reactjs ecmascript-6 redux

我创建了一个测验应用程序,它有问题和选项。首先,我映射了问题,并在映射中映射了属于该问题的选项。每个选项都有自己的 onClick 事件处理程序来设置答案,并且该事件处理程序将答案发送到服务器。但问题是事件处理程序发送了两次请求。原因一定是使用嵌套映射创建的元素,但我还没有找到任何解决方案。 这是代码的一部分:

let questions = null
if (this.props.questions) {
  questions = this.props.questions.map((question, index) => {
    return (
      <div className={classes.Question} key={question.id}>
        <p>{`${index + 1}) ` + question.value}</p>
        {question.options.map((option, optionIndex) => {
          return ( 
            <label onClick={question.clicked ? null : () => this.props.onSetQuestionAnswer(...params)} key={optionIndex}>{option.value}
              <input type="radio" name="radio" />
            </label>
          )
        })}
      </div>
    )
  })
}

点击事件 Action 创建者

export const setOptionForQuestion = (...params) => {
    return async dispatch => {
      try {
        const { data } = await axios.post(`endpoint`, {
          ..body
        })
        if (data.success) {
          dispatch({
            type: actionTypes.SET_ANSWER_OPTION,
            ...dataToReduxStore
          })
        }
      } catch (error) {
        dispatch({
          type: actionTypes.SET_ANSWER_OPTION_ERROR
        })
      }

    }
  }

最佳答案

您可以尝试调用 event.preventDefault()

export const setOptionForQuestion = (...params,e) => {
    e.stopPropagation()
    e.preventDefault()
    // rest of the code
  }

关于javascript - 如何防止嵌套映射元素触发 onClick 事件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52219758/

相关文章:

javascript - 将 JS 对象的值保存为标记

javascript - 如何向禁用指令添加函数 - Angular 2

Javascript Replace() 删除两个特殊字符之一

javascript - 为什么 JavaScript 全局变量不是全局的?

reactjs - 使用 firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL) 但是刷新时不会保留任何内容

reactjs - React PropTypes 与 Flow

javascript - react 一个组件正在改变类型复选框的不受控制的输入以被控制

javascript - 如何将其绑定(bind)到 React ES6 getter 和 setter 函数?

javascript - 如何通过searilizedarray()序列化复选框值?

javascript - 如何解析 Web MIDI API 输入消息 (onmidimessage)