render(),$emit(),还是不会啊。怎么debug?

628 篇文章 6 订阅
本文通过一个实例展示了Vue.js中父子组件的交互,包括数据传递和事件处理。使用`Vue.createApp`创建应用,定义了`PostList`父组件和`PostListItem`子组件。父组件维护了一个帖子列表,并通过自定义事件`vote`实现子组件的投票功能。虽然子组件的投票操作未直接修改数据,导致非响应式,但父组件的更新是响应式的。整个过程揭示了Vue.js组件的渲染机制和数据流管理。
摘要由CSDN通过智能技术生成
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
	</head>
	<body>
		<div id="app">
			<post-list></post-list>
		</div>
	
	    <script src="https://unpkg.com/vue@next"></script>
		<script>
		    const app = Vue.createApp({})
			// 父组件
			app.component('PostList', {
      			data() {
      				return {
      					posts: [
      						{id: 1, title: '《Servlet/JSP深入详解》怎么样', author: '张三', date: '2019-10-21 20:10:15', vote: 0},
      						{id: 2, title: '《VC++深入详解》观后感', author: '李四', date: '2019-10-10 09:15:11', vote: 0},
      						{id: 3, title: '《Java无难事》怎么样', author: '王五', date: '2020-11-11 15:22:03', vote: 0}
      					]
      				}
      			},
      			methods: {
      				// 自定义事件vote的事件处理器方法
      				handleVote(id){
      					this.posts.map(item => {
      						item.id === id ? {...item, voite: ++item.vote} : item;
      					})
      				}
      			},
      			render(){
      				let postNodes = [];
      				// this.posts.map取代v-for指令,循环遍历posts,
      				// 构造子组件的虚拟节点
      				this.posts.map(post => {
      					let node = Vue.h(Vue.resolveComponent('PostListItem'), {
    								post: post,
    								onVote: () => this.handleVote(post.id)
    							});
      					postNodes.push(node);
      				})
      				return Vue.h('div', [
      						Vue.h('ul',	[
      								postNodes
      							]
      						)
      					]
      				);
      			},
      		});
  		
  		    // 子组件
			app.component('PostListItem', {
				props: {
					post: {
					    type: Object,
					    required: true
					}
				},
				render(){
					return Vue.h('li', [
							Vue.h('p', [
									Vue.h('span',
										// 这是<span>元素的内容
										'标题:'+ this.post.title + ' | 发帖人:' + this.post.author + ' | 发帖时间:' + this.post.date + ' | 点赞数:' + this.post.vote
									),
									Vue.h('button', {
									    onClick: () => this.$emit('vote')
		
										},'赞')
								]
							)
						]
					);
				}
  		    });
  		
			app.mount('#app')
		</script>
	</body>
</html>

render是在什么时候用

emit是子组件传数据给父组件吧?
在这里,子组件的投票是非响应式的,父组件的投票是响应式的

父组件里所有的东西,都可以修改,在这里
子组件里,所有的都不能修改。

不是很懂

Vue.h(‘span’, 这是什么意思,有什么用?

import os from flask import Flask, render_template, request, redirect, sessions, jsonify from flask_socketio import SocketIO, emit # 导入socketio包 name_space = '/websocket' app = Flask(__name__) app.secret_key = 'secret!' socketio = SocketIO(app, cors_allowed_origins='*') client_query = [] max_restruct_count = 3 current_restruct_count = 0 queue = [] restr_msg = {} is_restructing = False @socketio.on('connect') def on_connect(): client_id = request.sid client_query.append(client_id) socketio.emit('abb', 'hi') print('有新连接id=%s接加入, 当前连接数%d' % (client_id, len(client_query))) global is_restructing, current_restruct_count if current_restruct_count == 0: socketio.emit('status', '0') else: socketio.emit('status', '1') @socketio.on('disconnect') def on_disconnect(): client_query.remove(request.sid) print('有连接id=%s接退出, 当前连接数%d' % (request.sid, len(client_query))) @socketio.on('abc') def on_message(abc): print(abc) def check(): global current_restruct_count if current_restruct_count == 0: socketio.emit('status', '0') else: socketio.emit('status', '1') @socketio.on('output') def start_restruct(dch): return 1 @app.route('/restruct', methods=['POST']) def restruct(): return jsonify({"code": 200, "msg": "processing"}) @app.route('/show_dirs', methods=['POST']) def show_dirs(): des_dir = 'moxingku' dirs_list = [] for root, dirs, files in os.walk(des_dir): for dir_name in dirs: if os.path.join(root, dir_name).count(os.sep) == 1: dirs_list.append(dir_name) return jsonify({"code": 200, "dirs_list": dirs_list}) if __name__ == '__main__': socketio.run(app, host='0.0.0.0', port=5000, debug=False)#allow_unsafe_werkzeug=True) 这段代码如何改可以将开发环境变成生产环境
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值