Я работаю с приложением React, и мне нужно передать идентификатор модалу, который открыт по методу onClick / onPress.
Компонент ниже - это компонент, который я собираюсь использовать для рендеринганекоторые данные, поступающие из массива, это компонент, из которого модал вызывается:
// imports ...
import {
passengerCardIdAction,
pickupPassengerCardIdAction,,
} from '../../screens/HomeScreen/actions/homeScreen';
const PassengersInfo = ({
id, // THIS IS THE ID I NEED
name,
address,
datetime,
callModal,
cardinalpoint,
navigationStore,
}) => {
return (
<View>
<View>
<View>
// MAYBE I CAN SET SOMETHING HERE WHERE I GRAB THE ID
// ON THE onPress METHOD ALONG WITH THE CALL MODAL FUNCTION
<TouchableOpacity onPress={callModal}>
CALL MODAL
</TouchableOpacity>
</View>
</View>
</View>
);
};
export default compose(
connect(
store => ({
passengerCardId: store.homeScreen.passengerCardId,
pickupPassengerCardId: store.homeScreen.pickupPassengerCardId,
}),
dispatch => ({
passengerCardIdActionHandler: id => {
dispatch(passengerCardIdAction(id));
},
pickupPassengerCardIdActionHandler: id => {
dispatch(pickupPassengerCardIdAction(id));
},
}),
),
)(PassengersInfo);
Затем этот компонент вызывается здесь:
class PassengerCardBasedOnRoute extends Component {
const { popupsModalsActionHandler, searchParam } = this.props;
render() {
return (
{passengerInfo.map(info => (
<View key={info.id}>
<PassengersInfo
id={info.id}
name={info.name}
address={info.address}
datetime={info.timestamp}
searchParam={searchParam}
cardinalpoint={info.cardinalpoint}
callModal={popupsModalsActionHandler}
/>
</View>
)}
);
}
};
export default compose(
connect(
store => ({
searchParam: store.homeScreen.searchParam,
navigationStore: store.homeScreen.navigation,
passengerCardId: store.homeScreen.passengerCardId,
allPassengersDropOffOptionsPopup:
store.popupsModals.allPassengersDropOffOptionsPopup,
pickupPassengerCardId: store.homeScreen.pickupPassengerCardId,
}),
dispatch => ({
popupsModalsActionHandler: data => {
dispatch(popupsModalsAction(data));
},
passengerCardIdActionHandler: id => {
dispatch(passengerCardIdAction(id));
},
pickupPassengerCardIdActionHandler: id => {
dispatch(pickupPassengerCardIdAction(id));
},
}),
),
)(PassengerCardBasedOnRoute);
Я могу получить идентификатор иустановите его с помощью Redux, если это возможно.Раньше я устанавливал модальную информацию в компоненте PassengersInfo
, но так как это массив, модальный вызывается примерно 40 раз, потому что раз родительский компонент рендерится.
Это то, как я делалэто раньше:
return (
{passengerInfo.map(info => (
<View key={info.id}>
<OptionsModal>
{
<AllPassengersOptionsModal
id={info.id}
handleDeleteOptionsModal={() =>
this.handleDeletePassenger(info.id)
}
handleCallOptionsModal={() =>
Linking.openURL(`tel:${info.phone}`)
}
/>
}
</OptionsModal>
<PassengersInfo
id={info.id}
name={info.name}
address={info.address}
datetime={info.timestamp}
searchParam={searchParam}
cardinalpoint={info.cardinalpoint}
callModal={popupsModalsActionHandler}
/>
</View>
)}
);
Итак, вышеописанным способом я получал данные именно так, как мне было нужно.Итак, как я могу реализовать что-то, чтобы получить нужный мне идентификатор?Мне нужна информация на каждой карточке отдельно, потому что модал включает в себя такие действия, как delete
и call
, в частности.
См. Примечания в моем коде.
РЕДАКТИРОВАТЬ, ЧТОБЫ ПОКАЗАТЬ РЕДУКТОРИ АКЦИЯ
действие
export const popupsModalsAction = () => ({
type: ActionTypes.TOGGLE_ALL_PASSENGERS_MODAL,
});
редуктор
const initialState = {
allPassengersDropOffOptionsPopup: false,
};
const handlers = {
[ActionTypes.TOGGLE_ALL_PASSENGERS_MODAL](state) {
return {
...state,
allPassengersDropOffOptionsPopup: !state.allPassengersDropOffOptionsPopup,
};
},
};