- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的 Vuex Store 中,我有一个计划状态,它描述了一周的计划。
planning : [
{
name : 'monday',
meetings : [
{
name : 'morning',
value : ''
}, {
name : 'noon',
value : ''
}, {
name : 'evening',
value : ''
}]
},
{
name : 'tuesday',
meetings : [
{
name : 'morning',
value : ''
}, {
name : 'noon',
value : ''
}, {
name : 'evening',
value : ''
}]
},
...
}
]
要显示我有这样的东西
规划周.vue
<template>
<div class="week columns is-desktop is-vcentered">
<PlanningDay v-for="(day, index) in planning" :key="index" :day="day"></PlanningDay>
</div>
</template>
<script>
import PlanningDay from './PlanningDay';
import { mapState } from 'vuex';
export default {
computed : mapState(['planning']),
components : {
PlanningDay
},
};
</script>
对于每一天,我都有 PlanningDay.vue,它从他的 Prop 中检索日期,然后渲染它,但这是 Vuex 的一种方式。因为通常我们总是必须从 Vuex 商店获取/设置(提交)。
在 Vuex Store 中渲染嵌套数组的最佳方式是什么?
我继续嵌套代码,以便您可以看到所有内容
PlanningDay.vue
<template>
<div class="day column">
<p class="name has-text-centered" v-text="day.name"></p>
<PlanningMeeting v-for="(meeting, index) in day.meetings" :key="index" :meeting="meeting"></PlanningMeeting>
</div>
</template>
<script>
import PlanningMeeting from './PlanningMeeting';
export default {
props : ['day'],
components : {
PlanningMeeting
}
};
</script>
最后是 PlanningMeeting.vue
<template>
<div class="meeting">
<p class="has-text-centered" v-text="meeting.name"></p>
<input type="text" v-model="meeting.value">
</div>
</template>
我怎样才能绑定(bind)来自 PlanningWeek 的 PlanningDay Prop 的 meeting.value?
由于修改是通过提交来更改状态的,因此看起来像这样:
<script>
export default {
props : ['meeting'],
computed : {
meetingList : {
get() {
return this.$store.state.planning[planningId].meetings[meetingId];
},
set(value) {
this.$store.commit('updateValue', ...planningId, meetingId, ... value);
}
}
},
};
</script>
所以我会将 v-model 与 meetingList 计算属性或类似的东西绑定(bind),但如何设法检索 planningId 和 meetingId,我的意思是以正确的方式。因为 Vuex 的重点是不要到处放事件和 Prop 并提取这个数据层。
那我是不是做错了什么?以及如何在 Vuex 中管理嵌套数组以将数据传递给嵌套组件的最佳方式?
预先感谢您的回答!
最佳答案
最好的办法是避免嵌套结构。这也是其他全局状态单状态树系统(如 redux)中的既定模式。但是这里不需要 Redux。规范化数据是一个好主意,是的 - 在 redux 中用于这些东西的模式也适用于 vuex。
归一化基本上意味着你把这个:
planning : [
{
name : 'monday',
meetings : [
{
name : 'morning',
value : ''
}, {
name : 'noon',
value : ''
}, {
name : 'evening',
value : ''
}]
},
{
name : 'tuesday',
meetings : [
{
name : 'morning',
value : ''
}, {
name : 'noon',
value : ''
}, {
name : 'evening',
value : ''
}]
},
...
}
]
进入这个:
planning: {
name: [monday,tuesday],
meetings: {
monday: { id: 'monday', name: [1,2,3] },
tuesday: { id: 'tuesday', name: [4,5,6] },
}
},
name : {
meetings : {
1: {id: 1, text: 'morning' , value: ''},
2: {id: 2, text: 'noon' , value: ''},
3: {id: 3, text: 'evening' , value: ''},
4: {id: 4, text: 'morning' , value: ''},
5: {id: 5, text: 'noon' , value: ''},
5: {id: 6, text: 'evening' , value: ''},
}
}
现在你可以在 Vuex Store 中实现简单的 getters 和 setters。看起来它更复杂,在某种程度上,有点。但优点是对于更新,您不必担心编写突变时与嵌套相关的任何问题。
例如:如果您需要所有计划的排序数组,您可以编写一个 getter:
planningArray (state) => {
return state.planning.list.map {
name => state.planning.meetings[name]
}
}
使用这个你不需要传递 Prop 。对于每次更改,您将数据推送到 Store 并使用“计算/方法”将其检索到另一个组件
关于arrays - 如何在 Vuex Store 中管理嵌套数组并通过组件传递它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46666011/
我一直在尝试将 Redux 集成到项目中。 我按照使用示例进行操作,但收到错误store.getState is not a function。 所以我知道其他人也问过类似的问题,但情况略有不同。 R
我正在尝试将我的第一个应用程序上传到 App Store。我已完成 iTunes Connect 所需的所有步骤,我的应用程序状态为“等待上传”。 我相信下一步是使用 Application Load
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
App Store 有所谓的“服务器到服务器”通知。也就是说,当您购买应用内功能时,Apple 服务器会向您服务器的回调方法(发送收据数据)发出 HTTPS 请求。 问题是 - 收据数据中似乎没有用户
我已经将我的第一个应用程序上载到App Store,但是我没有放置我的App需要位置服务和wifi的UIRequiredDeviceCapabilities。结果:该应用程序没有像应做的那样开始寻找坐
由于iOS 8将于本月发布,并且我的应用仅支持32位(因为第3个库仅兼容32位),因此我不确定如果我将新版本的应用提交给我,则该应用的新版本是否会被拒绝App Store将于下个月发布,因为它不支持6
我有一个让我有些困惑的问题。 为了将我的应用提交到App Store,我必须输入Bundle ID后缀。如您所知,Bundle ID会获得Bundle ID后缀的确切名称(您在Bundle ID后缀上
如问题所述,我想知道更新后的应用程序一旦获得批准,是否会自动发布到应用程序商店中? 我的更新已完成并且已经过测试,由于需要几天的时间才能批准,因此我希望现在将其提交批准。同时,我需要在服务器上更改一些
获取应用程序提交到 Apple App Store 的屏幕截图的最简单方法是什么,需要包含的各种尺寸是多少? 另外,是否允许状态栏?我相信我听说它不是,但是包括 Facebook 和 Quora 在内
我在 iTunes 商店中有一个应用程序,其分发证书(在 key 链访问中)将于明天到期。它是一年前生成的,尽管我最近更新了我的 iPhone 开发者计划,但我还没有更新任何证书或签名。 当我将测试设
我的商店包含以下 reducer : export const centralStampState = { layoutState : layoutReducer, //this one is n
我即将将我的应用程序提交到 Apple App Store,并且我了解到 Apple 需要两周时间才能对其进行审核,然后才能上线。但是,在 iTunes Connect 的定价部分,它询问我什么时候发
如果我的应用程序正在接受审核或已获得批准(因此处于 Ready For Sale 状态或同等状态),我可以编辑哪些应用程序信息而无需提交应用程序的新版本? 最佳答案 据此Apple Documenta
我已经在Opera管理控制台上进行了全面检查,看不到他们在哪里提到付款方式。他们说明何时制作,但没有说明。即Paypal,Cheque等。 有人知道他们如何付款吗? 最佳答案 当金额达到200美元时,
我上传了我的二进制文件并创建了屏幕截图。我做的所有屏幕截图都是 640x960,我将它们上传为 PNG。这背后的想法是,我应该以尽可能最好的质量把它交给他们,这样当他们将它们重新压缩成 320x480
我从Microsoft下载了Windows 8 app samples,并下载了这些示例之一加速度传感器示例 我不知道如何测试它以计划使用此功能的软件? 我没有水面设备,想知道只有一种方法可以做到吗?
我正在为TestFlight上传第二个应用程序。第一次进展顺利,但这次却被拒绝了。 We have started the review of your beta app, but we are no
不确定这是正确的论坛,如果不是,我提前道歉。 某处是否有 App Store 新版本的提要?还是带有类别和发布日期的应用提要/列表? 此列表已从 App Store 中消失,我想看看是否可以制作一个应
我有一个 JSON 存储,定义如下 var subAccountStore = new Ext.data.JsonStore({ autoLoad: true, proxy: { ty
我有一个提交到应用商店的应用被拒绝,原因是: 2.30 不符合 Mac OS X 文件系统文档的应用将被拒绝 他们声称我的应用正在修改不受支持的 ~/Library/Preferences/com.a
我是一名优秀的程序员,十分优秀!