2017-12-27 135 views
0

我正在编写一些项目,并且我有一个带有对象的json文件。在我的JSON文件中有用户列表。我没有将该列表导入带有表格的组件。现在我有很好的用户列表和他们的细节表。接下来我要做的是在每一行中创建“详细信息”按钮,并使用onClick按钮加载所有关于其他组件中用户的信息,这些信息将在表格旁边呈现。基本上我想做的是右侧的用户列表和左侧的特定用户的详细信息。表格不会改变,只更改左侧组件和用户信息。最大的问题是,我知道如何从http://localhost:3000/users.json加载json文件到表,但我不知道如何通过他们的id到达某些对象。例如http://localhost:3000/users/1反应如何达到JSON文件中的对象

我的容器装载JSON:

import React, { Component } from 'react'; 
import axios from 'axios'; 
import UserListComponent from './UserListComponent'; 

class UserListContainer extends Component { 
    constructor(props){ 
    super(props); 

    this.state = { 
     users: [] 
    }; 
    } 
    componentWillMount(){ 
    var self = this; 
    axios.get('http://localhost:3000/users.json') 
    .then((response) => { 
     self.setState({ users: response.data }); 
    }) 
    } 
    render(){ 
    return(
     <UserListComponent users={this.state.users} /> 
    ); 
    } 
} 

export default UserListContainer; 

这是用户表成分:

import React, { Component } from 'react'; 
import PropTypes from 'prop-types'; 
import { Link } from 'react-router-dom'; 

class UserCardComponent extends Component { 
    render(){ 
    return(
     <tr className='clickable-row' data-href='url://'> 
     <td>{this.props.id}</td> 
     <td>{this.props.name}</td> 
     <td>{this.props.surname}</td> 
     <td>{this.props.city}</td> 
     <td>{this.props.email}</td> 
     <td>{this.props.phone}</td> 
     <Link to={'/user/'+this.props.id} className="btn btn-primary">Details</Link> 
     </tr> 
    ); 
    } 
} 

UserCardComponent.propTypes = { 
    id: PropTypes.number.isRequired, 
    name: PropTypes.string.isRequired, 
    surname: PropTypes.string.isRequired, 
    city: PropTypes.string.isRequired, 
    email: PropTypes.string.isRequired, 
    phone: PropTypes.string.isRequired 
}; 

export default UserCardComponent; 

,并有我的index.js:

import '../node_modules/bootstrap/dist/css/bootstrap.css'; 
import React from 'react'; 
import ReactDOM from 'react-dom'; 
import './index.css'; 
import App from './App'; 
import UserDetails from './UserDetails'; 
import ContentComponent from './ContentComponent'; 
import registerServiceWorker from './registerServiceWorker'; 
import { 
    BrowserRouter as Router, 
    Route, 
    Link 
} from 'react-router-dom'; 
import jQuery from 'jquery' 
global.jQuery = jQuery 
global.jquery = jQuery // jquery lowercase was the solution 
global.$ = jQuery 
let Bootstrap = require('bootstrap') 

ReactDOM.render(
    <Router> 
    <App> 
     <Route exact path="/" component={ContentComponent} /> 
     <Route path="contact/:id" component={UserDetails} /> 
    </App> 
    </Router>, document.getElementById('root')); 
registerServiceWorker(); 

我的用户.json文件:

[{ 
    "id": 1, 
    "name": "Pempe", 
    "surname": "Pampino", 
    "city": "Torino", 
    "email": "[email protected]", 
    "phone": "+568888", 
    "active": true 
}, { 
    "id": 2, 
    "name": "John", 
    "surname": "Johnson", 
    "city": "Moscow", 
    "email": "[email protected]", 
    "phone": "+216545646", 
    "active": true 
}, { 
    "id": 3, 
    "name": "Anton", 
    "surname": "Antonov", 
    "city": "Los Angeles", 
    "email": "[email protected]", 
    "phone": "+5654448", 
    "active": true 
}] 

P.S.对不起我的英语不好。

+0

[通过反应路由器中的链接传递对象]的可能副本(https://stackoverflow.com/questions/31168014/pass-object-through-link-in-react-router) – pyhazard

回答

0

您可以使用filter方法来仅过滤指定id的值。

function getUserById(id) { return this.state.users.filter(x => (x.id === id))[0] }

请注意,此代码假定使用指定的ID的用户存在。

此代码可用于React组件,或者您可以在服务器上创建特定端点。

0

在UserDetails组件中(我不确定它是如何看起来像你的情况),你将有用户的id,所以你基本上需要做类似于你在UserListContainer componentWillMount方法中做的事情,那就是:加载用户,然后过滤出具有用户标识的列表。