React Redux не сопоставляет действие с реквизитом

#reactjs #react-redux

#reactjs #react-redux

Вопрос:

Я создал действие updateChapter для обновления базы данных. Я импортировал это в свой вызываемый компонент EditChapter . Когда я регистрировал реквизит для этого компонента, я не вижу updateChapter действий с этим реквизитом.

Я сопоставил некоторые другие действия из того же Actions.js файла с каким-либо другим компонентом, и они работают нормально. Я не понимаю этого случая. Вот мой код.

Actions.js

 export const updateChapter = formData => dispatch => {
    myAxios.post('/updateChapter', formData)
    .then(res => {
        console.log(res);
    })
    .catch(err => {
        console.log(err)
    });
}
 

Файл компонента

 import React from 'react';
import {connect} from 'react-redux';
import {updateChapter} from '../../store/chapterStore/Actions';

const EditChapter = props => {

    const {classes} = props;
    const [chapterTitle, setChapterTitle] = React.useState('');

    const updateChapterHandler = (event) => {
        event.preventDefault();
        let formState = {
            chapter_title: chapterTitle,
        }
        let formData = appendDataIntoFormData(formState);

        props.updateChapter(formData);
    }

    return (
        <div>
            <form onSubmit={updateChapterHandler}>
                 <Grid item xs={12}>
                        <FormControl
                            component="fieldset"
                            fullWidth
                            margin="normal">
                            <FormLabel component="legend">
                                Chapter Title
                            </FormLabel>
                            <TextField 
                            required
                            value={chapterTitle}
                            onChange={event => setChapterTitle(event.target.value)}/>
                        </FormControl>
                    </Grid>
            </form>
        </div>
     );
}

const mapActionToProps = ({
    updateChapter
});

export default connect(null, mapActionToProps)(EditChapter);
 

Комментарии:

1. Не могли бы вы поделиться тем, как вы используете updateChapter inside EditChapter ?

2. Обновлен вопрос с использованием updateChapter

3. Я не вижу ничего плохого в коде, но попробуйте перейти mapActionToProps с ({ updateChapter }); на { updateChapter }; и посмотреть, работает ли это.

4. все еще не работает @usafder

Ответ №1:

Не уверен, но попробуйте с этим:

     const mapActionToProps = dispatch => ({
          updateChapter: (formData) => dispatch(updateChapter(formData));
    }); 
 

Комментарии:

1. Это работает, и я принимаю ваш ответ, но можете ли вы объяснить, почему мой код не работал в этой ситуации?

Ответ №2:

Вы используете старый способ сокращения, мое предложение использовать последний способ React Redux братан!!

Комментарии:

1. каков последний способ react redux. можете ли вы предоставить какую-либо ссылку, объясняющую это?

Ответ №3:

Вы можете использовать хуки, это упростит ваш код.

Проверьте документацию https://react-redux.js.org/api/hooks