我是新来的反应者,我很难通过axios的get方法传递单本书的数据。
我认为这与网址有关,但我一直无法解决。

这是我的代码:



export function loadBook(book){
    return dispatch  => {
        return axios.get('http://localhost:3000/api/books/book/:id').then(book => {
            dispatch(loadBookSuccess(book.data));
            console.log('through!');
        }).catch(error => {
            console.log('error');
        });
    };
}

//also tried this
export function loadBook(id){
    return dispatch  => {
        return axios.get('http://localhost:3000/api/books/book/' + {id}).then(book => {
            dispatch(loadBookSuccess(book.data));
            console.log('through!');
        }).catch(error => {
            console.log('error');
        });
    };
}





包含指向每本书的变量链接的HTML代码


 <div className="container">
                <h3><Link to={'/book/' + book._id}> {book.title}</Link></h3>
                <h5>Author: {book.author.first_name + ' ' + book.author.family_name}</h5>
                <h4>Summary: {book.summary}</h4>
                <BookGenre genre={genre} />

            </div>

            





路线中的链接:



<Route path="/book/:id" component={BookPage} />





编辑:书籍组件的代码



class BookPage extends React.Component{
    render(){
        const book = this.props;
        const genre = book.genre;
        console.log(book);

        return(
            <div>
            <div>
                <h3> {book.title}</h3>
                <h5>Author: {book.author.first_name + ' ' + book.author.family_name}</h5>
                <h4>Summary: {book.summary}</h4>
                <BookGenre genre={genre} />
            </div>

        </div>
        );
    }
}

BookPage.propTypes = {
    book: PropTypes.object.isRequired
};

//setting the book with mapStateToProps
function mapStateToProps (state, ownProps){
    let book = {title: '', author: '', summary: '', isbn: '', genre: []};
    const bookid = ownProps.params._id;
    if(state.books.length > 0){
        book = Object.assign({}, state.books.find(book => book.id));
    }
    return {
        book: book
    };
}

function mapDispatchToProps (dispatch) {
    return {
        actions: bindActionCreators(loadBook, dispatch)
    };
}



export default connect(mapStateToProps, mapDispatchToProps)(BookPage);

最佳答案

而不是这样做:

axios.get('http://localhost:3000/api/books/book/' + {id})

You should do like this:-

axios.get(`http://localhost:3000/api/books/book/${id}`)

So your action.js might look like this:-

export function loadBook(id){
    const request = axios.get(`http://localhost:3000/api/books/book/${id}`);
    return dispatch  => {
        request.then(book => {
            dispatch(loadBookSuccess(book.data));
        }).catch(error => {
            console.log('error');
        })
    };
}


自从id以来,您已经传递了它似乎是一个字符串,因此可以使用ES6模板字符串将其串联起来,并确保将字符串包装在backtick中。或者您可以通过+运算符执行此操作,还请确保在id函数中将loadbook作为参数传递,以便可以将其连接到URL。

10-05 20:48
查看更多