reactjs - 可以将新的/修改的 URL 添加到子组件吗?

标签 reactjs react-router

我的应用程序的根目录是App。我的 App 组件使用 react-router 路由到不同的页面。目前,我只有 1 个,但还会有更多。每个页面都会呈现父组件,父组件将有 2 个子组件。对于每个父组件,一个子组件(我们称之为 Child1)是一种接受一些输入并进行 API 调用的表单。另一个组件(我们称之为 Child2)将以表格形式呈现此数据。

我的目标:不同的 parent 将在不同的路线上呈现:/parent1/parent2等。我希望Child1呈现在在要在 /parent1?name=something 上呈现的 /parent1Child2 上。查询参数需要保存用户提供的表单输入的值,以便我可以将其设为可共享的 URL。任何拥有这些参数的人都应该能够直接看到表格结果。我该怎么做?

这是我的一些精简代码: App.js:

const App = () => {
    return(
        <BrowserRouter>
            <div>
                <ul>
                    <li>
                        <Link to="/parent1">Parent-1</Link>
                    </li>
                </ul>
            </div>
            <hr/>

            <Switch>
                <Route path="/parent1">
                    <Parent1 />
                </Route>
            </Switch>
        </BrowserRouter>
    );
};

Parent1.js

class Parent1 extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            products: [],
            isSearched: false
        };
    };

    onFiltersSelected = (products) => {
        this.setState({
            products: products,
            isSearched: true
        });
    };

    render() {
        return (
            <div>
                <Header />
                {!this.state.isSearched ?
                    <Child1 onFiltersSelected={this.onFiltersSelected} /> :
                    <Child2 products={this.state.products} />}
            </div>
        );
    };
};

Child1.js

onFormSubmit = (e) => {
  // make API call and call onFiltersSelected from Parent1 
};
.......
render() {

        return (
            <div className="container container-fluid">
                    .........
                    .........
                    <div className="row">
                        <button type="submit" className="btn btn-primary">Search Instances</button>
                    </div>
                </form>
            </div>
        );
    };

Child2.js

class Child2 extends React.Component {

    render() {
        return (
            <div className="container">
            ....
            </div>
        );
    };
};

最佳答案

如果您定义 Parent1Route喜欢 <Route path="/parent1" component={Parent1}/> ,React 会传递一些像 location 这样的 props 。你可以这样做props.location.name并测试它。如果为空,则渲染 Child1 ,如果没有,则渲染 Child2 .

来源:https://learnwithparam.com/blog/how-to-handle-query-params-in-react-router/

关于reactjs - 可以将新的/修改的 URL 添加到子组件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62561781/

相关文章:

javascript - 在 ReactJS 创建 React 应用程序中创建构建风格

reactjs - 如何使用组件中的数据使用组件中的 react-router 链接传递数据?

reactjs - 如何在 React 中重构我的 App.js 页面路由?最好的做法是什么?

javascript - Webpack 模块联合和 react-router-dom

javascript - 动态构建函数?

reactjs - 我们可以在 Material UI 选择器中使用 Calendar 组件作为独立组件而不使用 Datepicker - 如果可以的话如何?

javascript - 有条件地进入 NavLink

reactjs - 如何使用 useQuery 重新输入 API 的响应?

react-router - 在具有动态 Prop 的同时测试来自链接组件的 href 值

javascript - 通过路由 react 传递对象?