Использование реакционных хуков в функциональном HoC - PullRequest
0 голосов
/ 07 мая 2019

Я новичок в реакции хуков, поэтому не уверен, что есть лучший способ реализовать нижеприведенное.У меня есть функциональный HOC, который добавляет некоторые элементы управления, например.ответить, удалить и т. д. любому упакованному компоненту.Действия реализованы как пользовательский хук useActions, который использует функциональный HOC.Проблема, с которой я сталкиваюсь, заключена в обертку. Компонент не создается.

Мне нужно реализовать действие как HOC, поскольку внутренний обернутый компонент необходимо повторно использовать в различных компонентах, и только в некоторых сценариях требуется поддержка действий.Кроме того, чтобы сделать его функцией, как это нужно в activHooks, нам нужно поделиться с другими обработчиками действий и реализациями где-нибудь еще.Поэтому предпочтительны пользовательские хуки.

Попытка применить HOC на основе классов к wrappedComponent, и он работает нормально.Невозможно взломать или войти в код HOC, который возвращает JSX с wrappedComponent.

// Func HOC that consumes useAction hook. UseAction returns 
arr of actions [reply, delete ]

function ActivityActions(props) {
  const {
    activity,
    classes: {
      actionsContainer,
    },
  } = props;

  const [actions] = useActions(activity.ActivityType);

  return (
    actions.length ?
      <div className={actionsContainer}>
        <ul>
          {
            actions.map(action => (
              <li>
                <Button>
                  {action}
                </Button>
              </li>
            ))
          }
        </ul>
      </div >
      : null
  );
}

// HOC wrapping the component
export const withActions = wrappedComponent => props => (
  <div>
    <wrappedComponent {...props} />
    <activityActions {...props} />
  </div>
);


Wrapped Component ActivityItem export - (ActivityItem just renders some text)
export const ActivityListItem = withActions(ActivityItem);

Final app render 
export default function App() {
  const mockActivity = GetActivity(1, 2, 1, null);

  return (
    <div className="container">
      <span> Activity Item </span>
      <ActivityListItem activity={mockActivity} />
    </div>
  );
}

компонент не отображается.Ожидайте увидеть кнопки действий под обернутым текстом действия компонента, изображением.

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