Redux рассылает только половину функций - PullRequest
1 голос
/ 03 мая 2020

Итак, я хочу напрямую заменить значение приоритета, которое изначально равно 1, на другое значение. Я создал для него избыточную функцию, но она отправляет ее несколько раз.

Действие

export const editPriority = (id, listID, newPriority) => {
  return {
    type: TRELLO_CONSTANTS.PRIORITY,
    payload: { id, listID, newPriority },
  };
};
      const { id, newPriority } = action.payload;
      const card = state[id];
      card.priority = newPriority;
      return { ...state, [`card-${id}`]: card };
    }

export const TRELLO_CONSTANTS = {PRIORITY: 'PRIORITY',};

and here's my function -

import {editPriority} from './actionTypes.js';

const card=({dispatch})=> {
  const [newPriority, priority] = useState(); 
}

const changePriority = (e) => {
    // newPriority(e);
    priority(e);
    dispatch(editPriority(id, listID, priority));
    console.log(priority);
  };

// and the main function


<button onClick={() => changePriority(1)}>1</button>
<button onClick={() => changePriority(2)}>0</button>

{priority === 0 ? <p>0</p> : null}
{priority === 1 ? <p>1</p> : null}

Поэтому, когда я нажимаю кнопку, она отправляет только id и listID, а не приоритет. Плюс я также не могу заставить работать последние 2 троичных оператора. Это неправильный способ доступа к ним?

Это вывод, который я получаю в расширении приращения -

{
  type: 'PRIORITY',
  payload: {
    id: 'card-0',
    listID: 'list-0'
  }
}

1 Ответ

1 голос
/ 03 мая 2020

Вам необходимо передать e непосредственно в editPriority, поскольку state обновления носят асинхронный характер, и изменение, вызванное priority(e), не будет отражено немедленно.

const changePriority = (e) => {
    // newPriority(e);
    priority(e);
    dispatch(editPriority(id, listID, e));
 };

Предложение:

В редукторе не изменяйте исходное состояние напрямую

const { id, newPriority } = action.payload;
const card = {...state[id]};
card.priority = newPriority;
return { ...state, [`card-${id}`]: card };

Также ваше имя состояния приоритета равно newPriority

Итак, используйте это значение при рендеринге:

{newPriority === 0 ? <p>0</p> : null}
{newPriority === 1 ? <p>1</p> : null}

Предложение : при названии своих состояний вы можете использовать его как const [priority, setPriority] = useState();, чтобы избежать путаницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...