【发布时间】:2019-10-11 11:44:15
【问题描述】:
<App foo="123" />
@connect((state) => state, () => {})
class App extends Component
我想用 123 渲染 App。
但是,如果 MapStateToProps 中的 state 有一个 foo 键并且其值为 abc,则组件将呈现 abc。
我可以检查 ownProps。
@connect((state, ownProps) => ({...state, ...ownProps}), () => {})
class App extends Component
并合并 ownProps 和 state。但是如果我开始在 Redux 中调度操作来更新 foo,状态将永远是abc。 ownProps 将始终覆盖 state 中的键。
我可以在组件挂载时调度一个动作。
componentDidMount() {
dispatchFoo(this.props.value)
}
当组件挂载时,我正在调度值
@connect((state) => state, () => {})`
Store 将更新为 abc,即自己的 props 的值。
Redux 将更新,组件将再次呈现。
但是这一次,状态将是abc in ..
@connect((state) => state, () => {})
设置这样的东西的最佳方法是什么?最好不需要组件渲染两次(我使用的是 SSR)。
就我而言,我正在使用 NextJS 并调用 API 来获取 getInitialProps 中的数据。 getInitialProps 的返回将数据放在道具上。这些道具给了App。当用户改变状态时,应用现在需要来自状态的数据,而不是道具
【问题讨论】:
-
为什么要在两个不同的地方/以两种不同的方式将相同的 prop 键传递给组件? (又名连接和内联)。这听起来像是一种非常容易出错的代码编写方式。
-
我不是。我正在向 App 传递价值
123的道具foo。之后,用户操作通过 redux 更改foo的值。 Connect 将 store 状态映射到 props。并且 state 有foo键。 -
是的,正是我所描述的。为什么你在 redux 中的 state 会有一个与 inline prop 相同的键?您应该有单独的道具键,用于从连接的商店中发送内联的内容
-
我正在使用 NextJS 并进行 API 调用以获取
getInitialProps中的数据。getInitialProps的返回将数据放在道具上。这些道具给App。当用户更改状态时,应用程序现在需要来自状态的数据,而不是道具。你能详细说明如何使用这个separate prop吗? -
不要将
foo作为组件上的道具传递,让 connect 传递该道具。如果您最初需要一个不同的值,然后使用该初始值设置存储