【问题标题】:How to call a React hook function and pass data to Redux store in one onClick event?如何在一个 onClick 事件中调用 React 钩子函数并将数据传递到 Redux 存储?
【发布时间】:2019-08-19 13:58:36
【问题描述】:

我正在尝试制作一个更改颜色并将其值传递给 Redux 存储的组件,但我在实现它时遇到了困难。

当我向 onClick 事件添加一个改变颜色的函数时,它可以工作。当我添加第二个传递值的函数时,只有第二个函数执行。

我曾尝试将这两个函数放在另一个函数中,但没有成功。

import React, { useState } from "react";
import { useSelector, useDispatch } from "react-redux";
import * as actionTypes from "../../store/Actions";

import { CSSTransition } from "react-transition-group";
import "./Shirts.scss";

import white from "../../assets/white.jpg";
import black from "../../assets/black.jpg";
import grey from "../../assets/grey.jpg";

const shirts = { white, black, grey };

function Shirts() {
  const [selected, setSelected] = useState(shirts.black);

  const selectedPoster = useSelector(state => state.poster);

  const dispatch = useDispatch();
  const passColor = e =>
    dispatch({ type: actionTypes.PASS_COLOR, payload: e.currentTarget.value });

  const changeColor = () => {
    setSelected(shirts.white);
  };

  return (
    <div>
      <div className="shirts">
        <CSSTransition
          in={true}
          key={shirts}
          appear={true}
          timeout={300}
          classNames="fade"
        >
          <img alt="T-Shirt" className="shirt" src={selected} />
        </CSSTransition>
      </div>

      <div>
        <img className="selected-poster" alt="Poster" src={selectedPoster} />
      </div>

      <div className="color-picker">
        <button
          className="white-button"
          value="White"
          onClick={(changeColor, passColor)}
        >
          <p className="white-text">
            W<br />
            H<br />
            I<br />
            T<br />E
          </p>
        </button>
        <button
          className="grey-button"
          value="Grey"
          onClick={(() => setSelected(shirts.grey), passColor)}
        >
          <p className="grey-text">
            G<br />
            R<br />
            E<br />Y
          </p>
        </button>
        <button
          className="black-button"
          value="Black"
          onClick={(() => setSelected(shirts.black), passColor)}
        >
          <p className="black-text">
            B<br />
            L<br />
            A<br />
            C<br />K
          </p>
        </button>
      </div>
    </div>
  );
}

export default Shirts;

【问题讨论】:

  • 您没有遇到语法错误吗? onClick={(() =&gt; setSelected(shirts.black), passColor)}
  • onClick={()=&gt;{ setSelected(shirts.black); passColor() }}
  • onClick={((e) =&gt; setSelected(shirts.grey), passColor(e))}
  • @zynkn passColor 期望接收事件作为参数。
  • @HMR onClick={(e =&gt; setSelected(shirts.white), passColor(e))} 得到我 'e' 未定义错误和 onClick={(e =&gt; passColor(e), setSelected(shirts.white))} 得到我太多重新渲染错误。 @zynkn 你的解决方案显示 TypeError: Cannot read property 'currentTarget' of undefined

标签: reactjs redux react-redux react-hooks


【解决方案1】:

正确的语法是:

onClick={((e) => setSelected(shirts.grey), passColor(e))}

【讨论】:

    猜你喜欢
    • 2017-11-18
    • 2018-07-02
    • 1970-01-01
    • 2021-07-29
    • 2016-12-21
    • 1970-01-01
    • 2020-01-31
    • 2019-12-31
    • 2021-03-29
    相关资源
    最近更新 更多