Основная проблема в том, что вы используете одно и то же состояние, чтобы открыть все подсказки.Один из способов исправить это - использовать идентификатор всплывающей подсказки.
полный код: https://codesandbox.io/s/2vv782j6z0
Действие:
export function toogleToolTipAction(id) {
console.log("toogleToolTipAction", id);
return {
type: "TOOGLE_TOOLTIP",
id // here i'm using the tooltip id
};
}
Редуктор:
case "TOOGLE_TOOLTIP":
return {
...state,
toolTipOpen: action.id // here i'm using the tooltip id
};
Контейнер:
const mapDispatchToProps = dispatch => {
return {
fetchServiceStatus: () => dispatch(getServiceStatusAction()),
toogleToolTip: id => dispatch(toogleToolTipAction(id)), // here i'm using the tooltip id
dummy: () => dispatch(toogleToolTipAction())
};
};
Компонент:
toggleToolTip = (id, e) => {
if (e.type === "mouseout") {
this.props.toogleTooltip(null);
} else {
this.props.toogleTooltip(id);
}
};
и
return (
<span key={index}>
<Tooltip
placement="top"
isOpen={this.props.toolTipOpen === serviceName + "-" + index}
target={serviceName + "-" + index}
toggle={this.toggleToolTip.bind(this, serviceName + "-" + index)}
>
{toolTipText}
</Tooltip>
</span>
);