Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为相似类型的操作创建一个缩减程序

为相似类型的操作创建一个缩减程序
EN

Stack Overflow用户
提问于 2019-03-12 03:04:44
回答 1查看 32关注 0票数 1

在我的项目中,我在redux中持久化选项按钮的状态。有不同的按钮组,我在单函数handleClick中处理它们的点击动作。但它似乎不起作用。我应该为每个按钮组创建不同的处理程序吗?有没有人能给出最好的解决方案?

代码:

代码语言:javascript
运行
AI代码解释
复制
import React, { Component } from "react";
import { Button } from "semantic-ui-react";
import { withRouter } from "react-router";
import Answers from "../Answers/Answers";
import { handleClick } from "../../actions/handleClickAction"
import { connect } from 'react-redux'

class Section extends Component {
    handleClick = event => {
        this.props.handleClick(event);
    };

    render() {
        console.log(this.state);

        let styles = {
            width: '50%',
            margin: '0 auto',
            marginBottom: '15px'
        }
        const { history } = this.props;
        const { que1, que2, que3 } = this.state;
        return (
            <>
                <p>1. I was stressed with my nerves on edge.</p>
                <Button.Group widths="5" onClick={this.handleClick} style={styles}>
                    <Answers selected={this.state.que1} style={{ backgroundColor: 'red' }} />
                </Button.Group>
                {` `}
                <p>2. I lost hope and wanted to give up when something went wrong.</p>
                <Button.Group widths="5" onClick={this.handleClick} style={styles}>
                    <Answers selected={this.state.que2} style={{ backgroundColor: 'red' }} />
                </Button.Group>
                {` `}
                <p>3. I feel very satisfied with the way I look and act</p>
                <Button.Group widths="5" onClick={this.handleClick} style={styles}>
                    <Answers selected={this.state.que3} style={{ backgroundColor: 'red' }} />
                </Button.Group>
                <p />
                {` `}
                <Button
                    disabled={!que1 || !que2 || !que3}
                    onClick={() => history.push("/section2", [this.state])}
                >
                    NEXT
        </Button>
            </>
        );
    }
}

export default withRouter(connect(null, { handleClick })(Section));

main.js

代码语言:javascript
运行
AI代码解释
复制
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import store from "./store";
import { Provider } from 'react-redux'

ReactDOM.render(<Provider store={store}><App /></Provider>, document.getElementById("root"));

index.js

代码语言:javascript
运行
AI代码解释
复制
import { combineReducers } from "redux";
import selectOptionReducer from "./selectOptionReducer";

export default combineReducers({
  selectOption: selectOptionReducer
})

selectOptionReducer.js

代码语言:javascript
运行
AI代码解释
复制
import { SELECT_OPTION } from "../actions/types"

const initialState = {
  que1: "",
  que2: "",
  que3: "",
  que4: "",
  que5: ""
}

export default (state = initialState, action) => {
  switch (action.type) {
    case SELECT_OPTION:
      return {
        ...state,
        que1: action.payload,
        que2: action.payload,
        que3: action.payload,
        que4: action.payload,
        que5: action.payload
      };
    default:
      return state;
  }
}

store.js

代码语言:javascript
运行
AI代码解释
复制
import { createStore } from 'redux'
import selectOptionReducer from "./reducers/selectOptionReducer";

const store = createStore(selectOptionReducer);

export default store;

handleClickAction.js

代码语言:javascript
运行
AI代码解释
复制
import { SELECT_OPTION } from "./types"

export const handleClick = e => {
  return {
    type: SELECT_OPTION,
    payload: e.target.attributes.getNamedItem("data-key").value
  }
}

输出:

EN

回答 1

Stack Overflow用户

发布于 2019-03-12 04:05:48

据我所知,该reducer将所有问题的状态设置为每个操作的相同答案。

您需要一种方法来指定正在回答的问题。

我会使用类似下面的代码,它为每个问题创建一个自定义的onClick处理程序,并将问题id传递给动作创建者,以包含在reducer有效负载中。然后,reducer使用该id仅更新正在回答的问题。

(未测试)

selectOptionReducer.js

代码语言:javascript
运行
AI代码解释
复制
export default (state = initialState, action) => {
  switch (action.type) {
    case SELECT_OPTION:
      const { questionId, value } = action.payload;
      return { ...state, [questionId]: value };
    default:
      return state;
  }
}

handleClickAction.js

代码语言:javascript
运行
AI代码解释
复制
export const handleClick = ({ questionId, e }) => {
  return {
    type: SELECT_OPTION,
    payload: { questionId, value: e.target.attributes.getNamedItem("data-key").value }
  }
}

组件

代码语言:javascript
运行
AI代码解释
复制
class Section extends Component {
  handleClick = questionId => e => {
      this.props.handleClick({ questionId, e });
  };

  ...

  <Button.Group widths="5" onClick={this.handleClick("que1")} style={styles}>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55113514

复制
相关文章
cmake/gcc:strip缩减程序体积
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/83212925
10km
2019/05/25
3.9K0
linux LVM逻辑卷的创建,扩容,缩减和删除
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
用户4877748
2020/07/22
7K0
linux  LVM逻辑卷的创建,扩容,缩减和删除
python数据类型-列表创建和操作
从字符串取数据的时候要分片,也就是切割。通过索引的形式,而这里用字符串取值的时候 每个角色取值的名字 长短不一,所以几个字符代表名字 ,是不可以的,血的值 也是经常变换的 所以显然字符串该被淘汰了。
py3study
2020/01/09
9540
[教程]创建一个整人的vbs程序
首先呢,我们在桌面创建个新文件夹然后打开,在上面找到-工具T-文件夹选项O-查看 把隐藏已知文件类型的扩展名前面的勾去掉. 然后我们开始制作.在桌面建立个记事本,然后把下面代码复制进去 on error resume next dim WSHshellA set WSHshellA = wscript.createobject("wscript.shell") WSHshellA.run "cmd.exe /c shutdown -r -t 60 -c ""说我是猪,不说我是猪就一分钟关你
Youngxj
2018/07/17
1.7K0
为企业内部部署的应用程序创建一个云开发环境
借助来自许多成熟的公有云服务的精心策划部署策略的内置工具,企业组织机构的IT团队可以——而且也应该将他们的测试/开发迁移到公共云服务了。 即使您企业在短期内不会将内部部署的应用程序迁移到云计算,您仍然也可以享受一个云开发环境的好处。许多企业组织正在采取一种混合云的方法:在公共云中运行开发和测试环境,而将生产应用程序保持在企业内部环境。 鉴于现如今的企业组织机构可以从多家云服务供应商处获得各种各样的工具,这使得企业的IT团队构建按需基础设施、部署代码并运行一系列的应用程序测试,以确保其是为生产做好了充分准备,
静一
2018/03/26
1.5K0
直接为CellPhoneDB创建一个独立的conda环境
最早出现在文章《Single-cell reconstruction of the early maternal–fetal interface in humans》,他们对对来自早期(6-14孕周)母胎界面样本(11个蜕膜,5个胎盘,6个PBMC)的70000个单细胞进测序(10X Genomics),也有Smart-seq2 全长单细胞转录组数据。研究者们为了系统地研究蜕膜-胎盘界面中胎儿和母体细胞之间的相互作用,作者开发了一个配体-受体相互作用的数据库(www.CellPhoneDB.org),该数据库可以预测分析不同细胞类型之间的分子相互作用。
生信技能树
2022/03/03
2.9K0
一个最基本的ATL窗口程序创建
在创建好的项目右击属性, 点击配置选择所有配置. 在常规下的项目默认值中的字符集选项, 修改为使用Unicode字符集
ClearSeve
2022/02/11
9950
一个最基本的ATL窗口程序创建
怎样创建一个谷歌扩展程序
谷歌扩展程序是个HTML,CSS和JAVASCRIPT应用程序,它可以安装在谷歌浏览器上。
Jimmy_is_jimmy
2020/11/05
6350
怎样创建一个谷歌扩展程序
创建第一个Qt程序
程序 #include "widget.h" //对于 Qt 程序来说,GUI 程序是QApplication //非 GUI 程序是QCoreApplication。QApplication派生自QCoreApplication #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); //创建一个应用程序对象,该对象有且仅有一个。 Widget w;
zy010101
2020/04/08
7410
创建第一个Qt程序
PCS7 过程标签类型批量创建程序演示
PCS7的项目重在前期的布局,编辑好模板程序,设置好相应引脚的显隐、参数等,后续会减少大量工作量。熟练运用IEA过程标签类型导入导出,在组态大型的PCS7项目时会有很大优势。
剑指工控
2021/11/09
1.6K0
为ASP.NET MVC创建一个基于Unity的ControllerFactory
谈到IoC和ASP.NET的集成,很多人会先后想到Ninject,不过我们个人还是倾向于Unity。这篇文章简单地介绍如果创建基于Unity的ControllerFactory。如下面的代码所示,我们通过直接继承DefaultControllerFactory创建一个自定的UnityControllerFactory。构造函数指定的是配置的UnityContainer的名称,如果没有显式指定则采用默认的UnityContainer。在重写的GetControllerInstance方法中,直接调用IUnit
蒋金楠
2018/01/15
7310
为ASP.NET MVC创建一个基于Unity的ControllerFactory
自定义类型的创建
 以上方法,对于有其他OO语言经验的开发人员去看,比较容易理解,但是性能上并不推荐。因为每次创建新的实例都需要进行一次判断,哪怕这次的性能损耗是极小的,但毕竟也是有损耗。
就只是小茗
2018/12/07
1.2K0
创建第一个spring HelloWorld程序
spring是一个轻量级的DI/IOC和AOP容器的开源框架。 DI:Dependency Injection(依赖注入) IoC:inverse of control(控制反转) AOP: Aspect-Oriented Programming(面向切面编程) DI指spring创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设置给该对象 IoC:控制反转,就是将原本在程序中手动创建对象的控制权交给spring容器来做。 AOP:aop采取横向抽取机制,将分散在各个地方的重复的代码提取出来,在编译运行时将这些代码应用到需要执行的地方。
微醺
2019/01/17
4170
pycharm创建第一个程序_python创建新文件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174511.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
5150
pycharm创建第一个程序_python创建新文件
Nova创建实例类型
创建一个实例类型名为:至尊型,ID为zzx,内存为8192M,系统盘为50G,CPU为8核,临时磁盘为:1G
院长技术
2021/02/19
1.1K0
Nova创建实例类型
004.LVM缩减
1 减少文件的大小一定需要按照上面提高的4个规定动作顺序来做,在缩减LV大小前,首先要缩减filesystem的大小,否则将导致文件系统破坏等恶劣影响。
木二
2019/07/26
4550
Swift Codable 将任意类型解析为想要的类型
默认情况下,使用 Swift 内置的 Codable API 解析 JSON 时,我们的属性类型需要和Json 中的类型保持一致,否则就会解析失败。
韦弦zhy
2021/11/24
2.1K0
点击加载更多

相似问题

使用类型安全操作创建根缩减程序

117

Python:使用`copyreg`为已有缩减程序的类型定义缩减程序

11

数组缩减或相似

21

Redux操作不触发缩减程序

12

Redux操作不调用缩减程序

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档