Передача параметра onClick, React

у меня есть этот кусок кода:

const ChangeRequest = ({
  inRelease,
  title,
  requestId,
  cost,
  supervisor,
  chipText,
  description,
  showModal,
}) => (
  <div
    onClick = {() => showModal({
      modal: 'changeRequestDetail',
      state: { title },
    })}
    className = {styles.crContainer}
  >

Главная проблема

в const ChangeRequest у меня есть значение title, мне нужно передать это значение свойству onClick модального окна.

модальный

<div
    onClick = {() => showModal({
      modal: 'changeRequestDetail',
      state: { title },
    })}
    className = {styles.crContainer}
  >

Таким образом, если я попытаюсь console.info(title), я получу undefined в качестве значения.

Вопрос

как я могу передать значение заголовка в значение state модального показа в функции onClick?

Добавлен showModal

поэтому я назвал это с помощью mapDispatchToProps

const mapDispatchToProps = {
  showModal: showModalAction,
};

это относительное действие

export const SHOW_MODAL = 'SHOW_MODAL';
export const HIDE_MODAL = 'HIDE_MODAL';

export function showModalAction(params) {
  return dispatch => dispatch({
    type: SHOW_MODAL,
    payload: params,
  });
}

export function hideModalAction(params) {
  return dispatch => dispatch({ type: HIDE_MODAL });
}

это его редуктор:

import { Map } from 'immutable';
import { SHOW_MODAL, HIDE_MODAL } from '../actions/modalActions';

const initialState = Map({
  type: null,
  state: null,
});

const modalReducer = (state = initialState, action) => {
  switch (action.type) {
    case SHOW_MODAL:
      return state
        .set('type', action.payload.modal)
        .set('state', action.payload.state);

    case HIDE_MODAL:
      return state
        .set('type', null)
        .set('state', null);

    default:
      return state;
  }
};

export default modalReducer;

Итак, я предполагаю, что в ваших функциях ChangeRequest и onClick, если вы напечатаете title на этих шагах, оно действительно получит значение. Если нет, то сначала разберитесь с этим. Но если он определен, можете ли вы добавить свою функцию showModal и то, как она пытается получить доступ к этому значению заголовка.

Jayce444 17.06.2019 12:12

да, заголовок на самом деле имеет значение, я уверен в этом, потому что, если я попытаюсь {console.info(title) вне div с помощью onClick, я получу точное значение заголовка. Я публикую это!

Legeo 17.06.2019 12:13

@Legeo хорошо, во-первых, почему ваше действие возвращает функцию, а не просто объект. Похоже, вы сделали действие SHOW_MODAL так, как будто это действие асинхронного типа redux-thunk, но это не так, просто мне кажется, что это обычное синхронное действие. Во-вторых, где значение теряется, когда вы проверяете action.payload.state в случае редуктора SHOW_MODAL?

Jayce444 17.06.2019 12:42

Можете ли вы передать это так: state: title вместо этого state: {title}, это сработает?

Thanveer Shah 17.06.2019 12:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
4
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вчера после нескольких попыток мне удалось получить данные. В чем была проблема ?

нам нужно mapStateToProps данные из состояния модального окна. Почему ? потому что модальный был редуктором.

import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import styles from './styles.module.css';
import BlueLightRow from './BlueLightRow';
import DetailSection from './DetailSection';
import Modal from '../../../components/Modal';
import Header from './Header';

function ChangeDetail({
  title, supervisor, architect, initiator, id, cost, description, chipText,
}) {
  return (
    <Modal noPadding bigDialog>
      {console.info(title)}
      <div className = {styles.blueBackground}>
        <div className = {styles.container}>
          <Header title = {title} chipText = {chipText} />
          <BlueLightRow cost = {cost} id = {id} />
          <DetailSection supervisor = {supervisor} architect = {architect} claimant = {initiator} description = {description} />
        </div>
      </div>
    </Modal>
  );
}

ChangeDetail.propTypes = {
  title: PropTypes.string.isRequired,
  architect: PropTypes.string.isRequired,
  initiator: PropTypes.string.isRequired,
  supervisor: PropTypes.string.isRequired,
  id: PropTypes.string.isRequired,
  cost: PropTypes.number.isRequired,
  description: PropTypes.string.isRequired,
  chipText: PropTypes.string.isRequired,
};

const mapStateToProps = state => ({
  title: state.getIn(['modalReducer', 'state', 'title']),
  architect: state.getIn(['modalReducer', 'state', 'architect']),
  initiator: state.getIn(['modalReducer', 'state', 'initiator']),
  supervisor: state.getIn(['modalReducer', 'state', 'supervisor']),
  description: state.getIn(['modalReducer', 'state', 'description']),
  cost: state.getIn(['modalReducer', 'state', 'cost']),
  id: state.getIn(['modalReducer', 'state', 'requestId']),
  chipText: state.getIn(['modalReducer', 'state', 'chipText']),
});

export default connect(mapStateToProps, null)(ChangeDetail);

Если кому-то понадобится больше объяснений о коде, я буду рад углубиться, если смогу :)

Другие вопросы по теме