我的情况是一个登录屏幕,显示3个代码块之一,具体取决于应用程序的商店状态。例如...如果选择了第二个显示选项,则下面将显示结果。使用Redux连接条件呈现ReactJs中的子元素的最佳做法?
对于每个显示选项都有特定的调用和逻辑,以保证它们自己的容器。我的文件结构是:
/components
/displayOpt1.jsx
/displayOpt2.jsx
/displayOpt3.jsx
/loginFormPage.jsx
/containers
/displayOpt1.js
/displayOpt2.js
/displayOpt3.js
/loginFormPage.js
我需要一种方法来使正确的选项不嵌入太多逻辑集成到父容器;因为它确实不需要知道任何有关任何登录机制。我可以想到一些方法来做到这一点。
- 所有在
loginFormPage.js
逻辑与直接连接到loginFormPage.jsx
。然后在loginFormPage.jsx
中直接调用组件的条件参数;删除其他容器。 - 在
loginFormPage.js
中创建React.Component以对其他容器执行条件呈现调用;这将调用容器组件中的所有.jsx文件。然后loginFormPage.jsx
将使用{props.children}
呈现选定的孩子。 - 与2相同,但执行
mergeProps
参数中的条件呈现调用传递给connect
loginFormPage.js
;而不是在容器js代码中创建一个jsx组件。 - 我不知道的一些标准做法?
现在我倾向于选项3,但我无法找到任何证据证明我的Google搜索是推荐的做法。欢迎所有的想法。谢谢。
一些代码,也许更容易:
loginFormPage.jsx
<div>
<div onClick={props.someActionHeader}>
<h1>Login Form</h1>
</div>
<div className="formarea">
// render the selected option here based on props.renderOptionChoice
// this will be one of displayOpt1, displayOpt2, displayOpt3
</div>
<div className="otherstuff">...</div>
</div>
displayOpt1.jsx - Opt2.jsx和Opt3.jsx代码是这样的
变化<div onClick={props.someAction1}>
stuff...
</div>
loginFormPage.js
import LoginFormPage from '../components/loginFormPage'
const mapStateToProps = (state, ownProps) => {
return {
renderOptionChoice: state.login.selectedLoginType,
}
}
const mapDispatchToProps = ...
export default connect(mapStateToProps, mapDispatchToProps)(LoginFormPage)
你是什么意思“调用”一个JSF文件?我不认为,任何这些接近都是首选。添加一些代码,以便我们可以了解您的应用程序的实际操作,以及可能的好方法。 – trixn
这已完成,请让我知道这是否有帮助。 – Shammoo
对于任何有兴趣的人,如果你自己有这个问题。我推荐阅读。 - [设计师的想法。他实际上在1和2之间改变了主意。](https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0) - [意见篇帮助你理解](https:// jaketrent .com/post/smart-dumb-components-react /) - [与其他人一致的伟大风格指南。见3.4](https://gist.github.com/datchley/4e0d05c526d532d1b05bf9b48b174faf) 文章的结果是他们建议选项2.是出于各种原因去的最佳方式。 – Shammoo