2024年Web前端最新超nice的vuex教程,2024大厂前端面试集合

react和vue的比较

相同
1)vitual dom
2)组件化
3)props,单一数据流

不同点
1)react是jsx和模板;(jsx可以进行更多的js逻辑和操作)
2)状态管理(react)
3)对象属性(vue)
4)vue:view——medol之间双向绑定
5)vue:组件之间的通信(props,callback,emit)

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

这里我们使用 ES6 的剪头函数来给 count 赋值

三、通过 mapState 的数组来赋值

computed: mapState([“count”])

这个算是最简单的写法了,在实际项目开发当中也经常这样使用。

Mutations 修改状态($store.commit())

=============================================================================================

Vuex 提供了 commit 方法来修改状态,我们粘帖出 Demo 示例代码内容,简单回顾一下,我们在 button 上的修改方法。

<button @click=“$store.commit(‘add’)”>+

<button @click=“$store.commit(‘reduce’)”>-

store.js 文件:

const mutations = {

add(state) {

state.count += 1;

},

reduce(state) {

state.count -= 1;

}

}

我们发现这个 $store.commit 传入的是 mutations 里面的一个方法名

传值:这知识一个最简单的修改状态的操作,在实际项目中我们常常需要在修改状态时传值。比如上边的例子,是我们每次只加1,而现在我们要通过所传的值进行想加。其实我们只需要在 Mutations 里再加上一个从参数,并在 commit 的时候传递就可以了。我们来看具体代码:

现在 store.js 文件里给 add 方法加上一个参数 n。

const mutation = {

add(state, n) {

state.count += n

},

reduce(state) {

state.count -= 1

}

}

在 Count.vue 里修改按钮的 commit() 方法传递的参数,我们传递 10,意思就是每次加 10。

<button @click=“$store.commit(‘add’, 10)”>+

<button @click=“$store.commit(‘reduce’)”>-

模版获取 Mutations 方法

===============================================================================

实际开发中我们也不喜欢看到 $store.commit() 这样的方法出现,我们希望跟调用模版里的方法一样调用。例如:@click="reduce" 就和没引用 vuex 插件一样。要达到这种写法,只需要简单的两步就可以了:

1、在模版 count.vue 里用 import 引入我们的 mapMutations:

import { mapState, mapMutations } from ‘vuex’

2、在模版的 标签里添加 methods 属性,并加入 mapMutations

methods: mapMutaions([

‘add’, ‘reduce’

])

通过上边两部,我们已经可以在模版中直接使用我们的 reduce 或者 add 方法了,就像下面这样:

<button @click=“reduce”>-

getters 计算过滤操作

============================================================================

getters 从表面是获得的意思,可以把他看作在获取数据之前进行的一种再编辑,相当于对数据的一个过滤和加工。你可以把它看作 store.js 的计算属性。

getters 基本用法


比如我们现在要对 store.js 文件中的 count 进行一个计算属性的操作,就是在它输出前,给它加上 100 ,我们首先要在 store.js 里用 const 声明我们的 getters 属性。

const getters = {

count: function(state) {

return state.count += 100

}

}

写好了 getters 之后,我们还需要在 Vuex.Store() 里引入,由于之前我们已经引入了 state 和 mutations ,所以引入里有三个引入属性。代码如下:

export default new Vuex.Store({

state,mutations,getters

})

在 store.js 里的配置算是完成了,我们需要到模版页对 computed 进行配置。在 vue 的构造器里边只能有一个 computed 属性,如果你写多个,只有最后一个 computed 属性可用,所以要对上面写的 computed 属性进行一个改造。改造时我们使用 ES6 中的展开运算符 ...

computed: {

…mapState([“count”]),

count() {

return this.$store.getters.count

}

}

需要注意的是,你写了这个配置后,在每次 count 的值发生变化的时候,都会进行加 100 的操作。

用 mapGetters 简化模版写法


我们都知道 state 和 mutations 都有 map 的引用方法把我们模版中的编码进行简化,我们的 getters 也是有的,我们来看一下代码:

首先用 import 引入我们的 mapGetters

import { mapState, mapMutations, mapGetters } from ‘vuex’

在 computed 属性中添加 mapGetters

…mapGetters([“count”])

actions 异步修改状态


actions 和之前讲的 Mutations 功能基本一样,不同点是,actions 是异步的改变 state 状态,而 Mutations 是同步改变状态。至于什么是异步什么是同步这里我就不做太多解释了。

在 store.js 中声明 actions

actions 是可以调用 Mutations 里的方法的,我们还是继续上面的代码,在 actions 里调用 add 和 reduce 两个方法

const actions = {

addAction(context) {

context.commit(‘add’, 10)

},

reduceAction({commit}) {

commit(‘reduce’)

}

}

在 actions 里写了两个方法 addAction 和 reducedAction,在方法体里,我们都用 commit 调用了 Mutations 里边的方法。细心的小伙伴会发现这两个方法传递的参数不一样。

  • context:上下文对象,这里你可以理解成 store 本身

  • {commit } :直接把 commit 对象传递过来,可以让方法体逻辑和代码更清晰明了。

模版中的使用


我们需要在 count.vue 模板中编写代码,让 actions 生效。我们先复制两个以前有的按钮,并改成我们的 actions 里的方法名,分别是:addAction 和 reduceAction 。

<button @click=“addAction”>+

<button @click=“reduceAction”>-

改造一个我们的 methods 方法,首先还是用扩展运算符把 mapMutations 和 mapActions 加入。

methods: {

…mapMutations([

‘add’,‘reduce’

]),

…mapActions([‘addAction’,‘reduceAction’])

}

你还要记得用 import 把我们的 mapActions 引入才可以使用。

增加异步检验


我们现在看的效果和我们用 Mutations 做的一模一样,肯定有小伙伴会好奇,那 actions 有什么用,我们为了演示 actions 的异步功能,我们增加一个计时器(setTimeout)延迟执行。在 addAction 里使用 setTimeout 进行延迟执行。

setTimeout(() => { context.commit(reduce)}, 3000)

console.log(‘我比reduce提前执行’)

我们可以看到在控制台先打印出了 “我比 reduce 提前执行”这句话。

module 模块组


随着项目的复杂性增加,我们共享的状态越来越多,这时候我们就需要把我们状态的各种操作进行一个分组,分组后再进行按组编写。那我们就再来看一下 module:状态管理器的模块组操作。

声明模块组:

在 vuex/store.js 中声明模块组,我们还是用我们的 const 常量的方法声明模块组。代码如下:

const moduleA = {

state,mutations,getters,actions

}

声明好后,我们需要修改原来 Vuex.Store 里的值:

export default new Vuex.Store({

modules: { a: moduleA }

})

在模块中使用

现在我们要在模板中使用 count 状态,要用插值的形式写入。

{{ $store.state.a.count }}

如果想用简单的方法引入,还是要在我们的计算属性中 return 我们的状态:

computed: {

count() {

return this.$store.state.a.count

}

}

---------------------------(正文完)------------------------------------

一个 Vue 的学习交流群,想进来面基的,可以点击这个logo外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传,或者手动search群号:685486827

写在最后: 约定优于配置-------软件开发的简约原则.

-------------------------------- (完)--------------------------------------

我的:

个人网站: https://neveryu.github.io/neveryu/

最后

我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

篇幅有限,仅展示部分截图:


我的:

个人网站: https://neveryu.github.io/neveryu/

最后

我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

篇幅有限,仅展示部分截图:

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Rasa 后端训练程序的示例,您可以参考并根据自己的需求进行修改和扩展。这个示例程序使用了 Rasa 2.x 版本,包括了自然语言理解 (NLU) 和对话管理 (DM) 的功能,并且可以连接到前端的 Rasa Web Chat 项目,提供智能问答服务。 首先,您需要安装 Rasa 和相关的依赖库。您可以使用以下命令来安装: ``` pip install rasa[spacy] python -m spacy download en_core_web_md ``` 然后,您需要编写培训数据,定义意图和实体,并编写自定义操作。这里我们使用一个简单的培训数据,包括一些常见的问答对。您可以将其保存为 `data/nlu.md` 文件。 ``` ## intent:greet - hello - hi - hey - good morning - good afternoon - good evening ## intent:goodbye - bye - goodbye - see you - see you later ## intent:thanks - thank you - thanks - thank you very much - thanks a lot ## intent:ask_name - what is your name - who are you - what should I call you - can you introduce yourself ## intent:ask_age - how old are you - what is your age - when were you born ## intent:ask_location - where are you from - where do you live - what is your location ## intent:ask_weather - what is the weather like today - is it going to rain today - how hot is it today ## intent:default - anything else - what else can you do - I have a question ``` 接下来,您需要定义意图和实体,以及编写自定义操作。这里我们使用了一些简单的意图和实体,并提供了一些自定义操作,用于处理用户的输入和生成相应的回答。您可以将其保存为 `domain.yml` 文件。 ``` intents: - greet - goodbye - thanks - ask_name - ask_age - ask_location - ask_weather - default entities: - location - date responses: utter_greet: - text: "Hello, how can I help you?" utter_goodbye: - text: "Goodbye, have a nice day!" utter_thanks: - text: "You're welcome, happy to help!" utter_ask_name: - text: "My name is ChatBot, what's yours?" utter_ask_age: - text: "I'm a chatbot, so I don't have an age. How can I assist you?" utter_ask_location: - text: "I'm a virtual assistant, so I don't have a physical location. What can I do for you?" utter_ask_weather: - text: "I'm sorry, I'm not able to provide real-time weather information at the moment." utter_default: - text: "I'm not sure I understand. Can you please rephrase your question?" ``` 最后,您需要编写 Rasa 后端程序的代码,启动 Rasa 服务器,并提供 API 接口,用于处理用户的输入和生成相应的回答。这里我们使用了一个简单的 Flask 应用程序,您可以将其保存为 `app.py` 文件。 ``` from flask import Flask, request, jsonify from rasa.core.agent import Agent app = Flask(__name__) agent = Agent.load("models/20210205-005303.tar.gz") @app.route("/webhooks/rasa/webhook", methods=["POST"]) def webhook(): data = request.json message = data["message"] sender_id = data["sender"] response = agent.handle_text(message, sender_id=sender_id) text = response[0]["text"] return jsonify({"text": text}) if __name__ == "__main__": app.run(debug=True) ``` 在上面的代码中,我们首先创建了一个 Flask 应用程序,并加载了之前训练好的 Rasa 模型。然后,我们定义了一个 API 接口,并使用 `handle_text()` 方法处理用户的输入,生成相应的回答。最后,我们启动了 Flask 应用程序,并开启了调试模式。 在启动后端程序之前,您还需要先通过 `rasa train` 命令来训练 Rasa 模型,并生成相应的模型文件。在训练完成后,您可以将模型文件保存到 `models` 目录下,并使用 `tar.gz` 格式进行压缩。然后,您可以使用以下命令来启动后端程序: ``` python app.py ``` 启动后,在您的前端 Rasa Web Chat 项目中,您可以使用以下代码来连接到后端程序,并与聊天机器人进行交互: ``` const widget = window.WebChat.create({ socketUrl: "http://localhost:5000/webhooks/rasa/webhook", title: "ChatBot", initPayload: "/greet", inputTextFieldHint: "请输入您的问题...", connectingText: "正在连接到聊天机器人...", showFullScreenButton: true, hideWhenNotConnected: false, embedded: true, params: { storage: "session" } }); window.WebChat.open("chat-bot", widget, () => { console.log("聊天窗口已打开!"); }); ``` 在上面的代码中,我们使用了 `socketUrl` 参数指定了 Rasa 后端程序的地址和端口号,并使用了一些其他的配置选项,例如聊天窗口的标题、提示文本、样式等等。然后,我们调用了 `window.WebChat.open()` 方法,将聊天窗口嵌入到网页中,并指定了一个 DOM 元素作为容器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值