У меня есть приложение React Redux, которое использует пакет npmact-select с множественным выбором.Моя проблема в том, что он создает искаженный массив, который я не могу перебрать.
this.state.typeOfFruit = [
0: {label: "label 1", value: "apple"},
1: {label: "label 2", value: "orange"},
2: {label: "label 3", value: "banana"}
]
Я хочу иметь возможность перебирать его с помощью базовой команды прямо сейчас, чтобы начать собирать нужную информацию.
typeOfFruit.map((fruit) => console.log(fruit.value))
Я пытался выяснить, как получить доступ к искаженному массиву или изменить массив на что-то, к чему я мог получить доступ, но подумал, что мой вопрос должен измениться на то, как использовать эту технологию для создания хорошего массива.
Приведенный ниже код является частью общего кода, но он должен охватывать все части проблемы.Если вы видите какие-либо ослепительные дыры, пожалуйста, дайте мне знать.
class FruitOrderForm extends Component {
constructor(props) {
super(props)
this.state = {
typeOfFuit: [],
}
}
const fruitOptions = [
{ value: 'apple', label: 'label 1' },
{ value: 'orange', label: 'label 2' },
{ value: 'banana', label: 'label 3' },
]
handleMultiSelectChange = (typeOfFruit) => {
this.setState({ typeOfFruit });
}
onSubmit = (e) => {
e.preventDefault();
this.props.updateProfile(this.state)
document.getElementById("fruitOrderForm").reset();
}
render() {
this.state.typeOfFruit.map((fruit) => console.log(fruit.value))
return (
<div>
<form id='fruitOrderForm' onSubmit={this.onSubmit}>
< Select
id='typeOfFruit'
value={this.state.typeOfFruit}
onChange={this.handleMultiSelectChange}
options={fruitOptions }
isMulti='true'
isSearchable='true'
/>
<button>Update</button>
</form>
</div>
)
}
}
const mapStateToProps = (state, ownProps) => {
const profile = state.firebase.profile
return{
profile: profile,
auth: state.firebase.auth
}
}
const mapDispatchToProps = (dispatch) => {
return {
updateProfile: (users) => dispatch(updateProfile(users)),
}
}
export default compose(
connect(mapStateToProps, mapDispatchToProps),
firestoreConnect([{ collection: 'users'}]))(
FruitOrderForm)
Затем он переходит в магазин избыточного действия
export const updateProfile = (users) => {
return (dispatch, getState, { getFirebase, getFirestore }) => {
const firestore = getFirestore();
const profile = getState().firebase.profile
const userID = getState().firebase.auth.uid;
firestore.collection('users').doc(userID).update({
...profile,
typeOfConsulting: users.typeOfConsulting
}).then(() => {
dispatch({ type: 'UPDATED_PROFILE', profile });
console.log('update successful')
}).catch((err) => {
dispatch({ type: 'UPDATE_PROFILE_ERROR', err });
console.log('There was an error', err)
})
}
}
Затем через редуктор
const businessProfileReducter = (state = initState, action) => {
switch (action.type) {
case 'CREATE_BUSINESS_PROFILE':
console.log('created business profile', action.businessProfile)
return state;
case 'CREATE_BUSINES_PROFILE_ERROR':
console.log('create business profile error', action.err);
return state;
default:
return state;
}
}
export default businessProfileReducter;
Тогда корневой редуктор
const rootReducer = combineReducers({
auth: authReducer,
businessProfile: businessProfileReducer,
firestore: firestoreReducer,
firebase: firebaseReducer
})
export default rootReducer
То, что я хочу получить с помощью этого, было бы хорошим массивом, который я мог бы перебрать.
this.state.typeOfFruit = [
{label: "label 1", value: "apple"}
{label: "label 2", value: "orange"}
{label: "label 3", value: "banana"}
]