【问题标题】:How to filter an array based on route in React.js?如何根据 React.js 中的路由过滤数组?
【发布时间】:2018-05-28 08:53:19
【问题描述】:

我有一个帖子数组,我想使用 url 或路由中的值来确定我想在数组中显示的内容,比如过滤器。例如,我选择的帖子是“www.mywebsite.com/chocolate”,所以在我显示帖子的路线中,我只显示“巧克力”而不是所有其他帖子。有什么我可以这样做的,结果 === 'chocolate':

const post = response.data.filter(({url}) => url === 'dynamic_variable_that_knows_what_the_current_url_is_with_the_value_of_chocolate');

下面是我的 App.js 代码:

getData() {
    axios.get('/posts.json')
        .then(response => {
            //console.log(response);
            const post = response.data;
            const updatedPosts = post.map(post => {
                return {
                    ...post
                }
            });

            this.setState({
                posts: updatedPosts
            });
        })
        .catch(error => {
            console.log(error);
        });
}

render() {

    return (
        <div className={classes.App}>
            <Layout>
              <Switch>
                <Route path="/food/:slug" exact render={(props) => this.state.posts.map(post => { return (<FullPost key={post.id} id={post.id} pathname="/:slug" {...props} />)} )} />
                <Route render={() => <h1>Whoops! What you're looking for isn't here anymore.</h1>} />
              </Switch>
            </Layout>
        </div>
     );
}

【问题讨论】:

    标签: javascript arrays reactjs url filter


    【解决方案1】:

    使用props.match.params 访问slug 并稍后过滤。

    考虑以下来自 Router 4 documentation 的示例。

    <Route path="/user/:username" component={User}/>
    
    const User = ({ match }) => {
      return <h1>Hello {match.params.username}!</h1>
    }
    

    在你的情况下,它看起来类似于

    const post = response.data.filter(url => url === this.props.match.params.slug);
    

    【讨论】:

    • 感谢您的建议,看起来我得到了一个未定义的“无法读取属性 'params'...
    • 因为您必须确保 this 引用您的组件。小心你如何调用 getData()
    • 谢谢,我现在明白你的意思了。为了帮助其他人,我会澄清一下,因为我在 App.js 级别进行过滤逻辑,所以没有组件可以将道具参数传递给,我不能直接将道具从 App.js 传递给 FullPost,js。所以我创建了一个中间组件来过滤我可以访问道具和传递道具的帖子。所以流程是这样的。 App.js 包含加载中间 (具有道具)的 加载 (从 FullPostSorter 拉入道具)。
    猜你喜欢
    • 2021-07-22
    • 2016-07-28
    • 1970-01-01
    • 2013-06-20
    • 2020-01-21
    • 2020-08-09
    • 2014-02-19
    • 2021-04-10
    • 2022-12-07
    相关资源
    最近更新 更多