javascript - 动态设置 React 组件的 Props

标签 javascript reactjs react-router

我正在使用 React、Redux 和 React-Router

我有这个routes.js :

export default (
    <Route path="/" component={App}>
        <IndexRoute components={{ content: Home }} />
        <Route path="clients" components={{ content: Clients, sidebar: wrapClientSidebarWithProps({sidebarSelectedName: 'all'}) }} />     
    </Route>
);

function wrapClientSidebarWithProps(props) {
    return <ClientSidebar {...props} />;
}

您可以假设所有导入都在那里。没有那个<Route path="clients" ...一切正常,添加后我会得到以下信息:

Warning: React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components). Check the render method of RouterContext.

Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object. Check the render method of RouterContext.

app.js这些渲染的位置是:

const App = ({content, sidebar}) => {
    let wholeSidebar;
    if (sidebar) {
        wholeSidebar = (
            <section className="context-nav-container">
                {sidebar}
            </section>
        );
    }

    return (
        <div className="main-container">
            <Header />
            
            {content}

            {wholeSidebar}
        </div>
    );
}

App.propTypes = {
    content: PropTypes.object.isRequired,
    sidebar: PropTypes.object
};

export default App;

ClientSideBar.js是:

const ClientSidebar = ({selectedName}) => {
    const linksObjs = [
        { id: 'all', name: 'All', to: 'clients', icon: 'fa-list' },
        { id: 'client', name: 'New', to: 'client', icon: 'fa-plus' }
    ];

    const links = linksObjs.map((l, i) => {
        const fullClasslist = 'fa ' + l.icon;

        let stickClass = '';
        if (l.id === selectedName) {
            stickClass = 'stick';
        }
        return (
            <li key={i} className={stickClass}><Link to={l.to}> <i className={fullClasslist} /> {l.name}</Link></li>
        );
    });

    return (
        <ul className="context-nav">
            {links}
        </ul>
    );
};

ClientSidebar.propTypes = {
    selectedName: PropTypes.string
};

export default ClientSidebar;

最佳答案

所以这个函数:

function wrapClientSidebarWithProps(props) {
    return <ClientSidebar {...props} />;
}

无法返回创建的组件,需要返回一个可以创建组件的函数:

function wrapClientSidebarWithProps(props) {
    return function WrappedClientSidebar() { return <ClientSidebar {...props} />; };
}

关于javascript - 动态设置 React 组件的 Props,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41164329/

相关文章:

javascript - 如何在Draft.js中插入/上传图像(更新实体和 block )?

javascript - 冒泡 componentWillUpdate 和 componentDidUpdate

javascript - React 路由器从子类更新父状态

JavaScript 数组不工作?使困惑

javascript - 上下文菜单事件后未注册 Keyup 事件

javascript - Angular - 设置每页更改的路径变量

reactjs - React-router-dom 中 withRouter 的作用是什么?

javascript - 在 Angular 2/TypeScript 中使用 Google API

javascript - 如何在 ReactJS 中预先选中某些复选框

javascript - React router 2.6.0 如何在点击函数内重定向