【问题标题】:React / Redux - Get Details from Url IDReact / Redux - 从 Url ID 获取详细信息
【发布时间】:2016-11-22 13:14:50
【问题描述】:

我正在制作作品集。

我的http://localhost:8080/works有一个作品列表

当我点击“了解更多”按钮时,我想转到一个不同的网址,向我显示有关该特定工作的更多信息。

为此,我认为我需要从 url 获取 ID。

我正在尝试使用 AXIOS 发出获取请求,但它不起作用......所以我决定重新开始。

有人可以帮我吗?

actions/index.js

export function workFetch(id) {

    return {
        type: 'WORK_FETCH',
        payload: request
    };

}

containers/trabalhos.js

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { Link } from 'react-router';


class Trabalhos extends Component {


renderList(){

    return this.props.trabalhos.map((trabalho) => {
        return(

            <li key={trabalho.id}>                 
                    <img src={trabalho.img} />
                    <p className="trabalho_titulo">{trabalho.title}</p>
                    <p className="trabalho_desc">{trabalho.descricao}</p>
                <Link to={"trabalhos/" + trabalho.id}>    
                    <a className="trabalho_saber_mais">Saber Mais</a>
                </Link>
            </li>

        );
    });
}


render(){

    return (

        <div>
            <div className="trabalhos">
                <div className="trabalhos_caixa">
                    <div className="row">
                        <div className="col-xs-12">
                            <ul className="no_pad">
                                {this.renderList()}
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </div>

    );
}
}


function mapStateToProps(state){

    return {

        trabalhos: state.trabalho

    };
}



export default connect(mapStateToProps)(Trabalhos);

containers/trabalhos_show.js

import React, { Component } from 'react';
import { connect } from 'react-redux';

class TrabalhosShow extends Component {

    render(){
        return (

            <div>

                <li>Show post: {this.props.params.id}</li>
                <li>Descrição: {this.props.params.descricao}</li>

            </div>

            )
    }

}

function mapStateToProps(state, props) {
  return {
    data: state.trabalho[props.params.id],
  };
}


export default connect(mapStateToProps)(TrabalhosShow);

减速器

reducers/index.js

import { combineReducers } from 'redux';
import TrabalhoPortofolio from './reducer_trabalhos';

const rootReducer = combineReducers({
    trabalho: TrabalhoPortofolio
});

export default rootReducer;

reducers/reducer_trabalhos.js

export default function() {

    return [

        { id: 1, title: 'Miristica', tec: "Wordpress-Woocommerce", descricao: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", img: 'http://feiraalternativa.pt/wp-content/uploads/2016/04/Miristica-Bio-Cosm%C3%A9tica.png'},
        { id: 2, title: 'Teste', tec: "Wordpress-Woocommerce", descricao: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", img: 'https://pbs.twimg.com/profile_images/766360293953802240/kt0hiSmv.jpg'},

    ];

}

routes.js

import React from 'react';
import { Route, IndexRoute } from 'react-router';

import App from './components/app';
import Index from './components/index';
import Trabalhos from './containers/trabalhos';
import TrabalhosShow from './containers/trabalhos_show';

export default (
<Route path="/" component={App}>
    <IndexRoute component={Index} />
    <Route path="trabalhos" component={Trabalhos}/>
    <Route path="trabalhos/:id" component={TrabalhosShow} />
</Route>
);

再次,目标是当我单击作品或在“了解更多”按钮中时,我想根据 ID 转到单个页面。

我想显示该特定 ID 的信息。

谢谢。

【问题讨论】:

  • 您目前的问题究竟是什么?好像您已经在TrabalhosShow 中获得了id
  • 是的,我有 id,但我想根据 url 中的 id 获取减速器中的其余信息。我想获取图片和描述等...
  • 当您现在点击“了解更多”按钮时,您的浏览器中会发生什么(另见浏览器控制台)?
  • 我想我需要通过 Url 上的 ID 进行获取,我正在使用 Axios。感谢您的帮助

标签: javascript reactjs redux react-router react-redux


【解决方案1】:

您需要连接TrabalhosShow,类似于Trabalhos。注意,你也可以access the passed props in mapStateToProps,所以不需要连接整个状态:

function mapStateToProps(state, props) {
  return {
    data: state.trabalho[props.params.id]
  };
}

export default connect(mapStateToProps)(TrabalhosShow);

实体将通过 data 属性传递给您的组件,例如this.props.data.title 将返回标题。

【讨论】:

  • inyono 感谢您的帮助。但它不起作用,或者我不理解......我会在我的问题中更新我的 trabalhos.show.js,让你看看我做错了什么。非常感谢
  • 由于data: state.trabalho[props.params.id],您必须使用this.props.data 访问实体。所以this.props.params.descricao 应该是this.props.data.descricao。恕我直言,登录this.props 以查看发生了什么通常会很有帮助。
  • inoyono,现在我可以得到 this.props.params.descricao ,但所有作品都一样,我想我需要通过 url 上的 id 去。我试图做一个 GET whit Axios。但它也不起作用:(
  • 不确定您要达到的目标。就像您说的,您可以访问该实体。此外,您可以通过this.props.params.id(顺便说一下,URL 中的 id)访问您可能在 GET 请求中使用的 id(如果这是您想要实现的)。
  • 是的,我想根据该 ID 发出 GET 请求,当我单击“了解更多”按钮时,它会将我发送到 localhost:8080/trabalhos/1localhost:8080/trabalhos/2,并从中获取信息身份证
猜你喜欢
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多