Vue Slots Jsx
Slots are a powerful tool for creating reusable components in Vue.js, though they aren’t the simplest feature to understand. Let’s take a look at how to use slots and some examples of how they can be used in your Vue applications. With the recent release of Vue 2.6, the syntax for using slots has been made more succinct. Render props is a design pattern from React that allows a closer-to-the-compiler alternative to templates with fine-grain control over rendering. In this article, Darren Jennings shows you how to implement render props with Vue.js. Render Functions & JSX Basics. Vue recommends using templates to build your HTML in the vast majority of cases. There are situations however, where you really need the full programmatic power of JavaScript.
You’re browsing the documentation for v2.x and earlier. For v3.x, click here.
- To encapsulate a component with high reusability, a slot may not be enough. We can reserve multiple slots for each slot at different locations of the component structure, name each slot, and distribute the corresponding content to different slots when calling the component.
- Vue中使用 render写一些展示组件 通过实现一个简单的单元 cell 组件, 来了解render jsx 在vue的使用 将 h 作为 createElement 的别名是 Vue 生态系统中的一个通用惯例,实际上也是 JSX 所要求的。.
Creating a Vue Instance
Every Vue application starts by creating a new Vue instance with the Vue
function:
Although not strictly associated with the MVVM pattern, Vue’s design was partly inspired by it. As a convention, we often use the variable vm
(short for ViewModel) to refer to our Vue instance.
When you create a Vue instance, you pass in an options object. The majority of this guide describes how you can use these options to create your desired behavior. For reference, you can also browse the full list of options in the API reference.
A Vue application consists of a root Vue instance created with new Vue
, optionally organized into a tree of nested, reusable components. For example, a todo app’s component tree might look like this:
We’ll talk about the component system in detail later. For now, just know that all Vue components are also Vue instances, and so accept the same options object (except for a few root-specific options).
Data and Methods
When a Vue instance is created, it adds all the properties found in its data
object to Vue’s reactivity system. When the values of those properties change, the view will “react”, updating to match the new values.
When this data changes, the view will re-render. It should be noted that properties in data
are only reactive if they existed when the instance was created. That means if you add a new property, like:
Then changes to b
will not trigger any view updates. If you know you’ll need a property later, but it starts out empty or non-existent, you’ll need to set some initial value. For example:
Jsx Vue Slots
The only exception to this being the use of Object.freeze()
, which prevents existing properties from being changed, which also means the reactivity system can’t track changes.
In addition to data properties, Vue instances expose a number of useful instance properties and methods. These are prefixed with $
to differentiate them from user-defined properties. For example:
In the future, you can consult the API reference for a full list of instance properties and methods.
Instance Lifecycle Hooks
Each Vue instance goes through a series of initialization steps when it’s created - for example, it needs to set up data observation, compile the template, mount the instance to the DOM, and update the DOM when data changes. Along the way, it also runs functions called lifecycle hooks, giving users the opportunity to add their own code at specific stages.
For example, the created
hook can be used to run code after an instance is created:
There are also other hooks which will be called at different stages of the instance’s lifecycle, such as mounted
, updated
, and destroyed
. All lifecycle hooks are called with their this
context pointing to the Vue instance invoking it.
Don’t use arrow functions on an options property or callback, such as created: () => console.log(this.a)
or vm.$watch('a', newValue => this.myMethod())
. Since an arrow function doesn’t have a this
, this
will be treated as any other variable and lexically looked up through parent scopes until found, often resulting in errors such as Uncaught TypeError: Cannot read property of undefined
or Uncaught TypeError: this.myMethod is not a function
.
Vue Jsx Slot Props
Lifecycle Diagram
Below is a diagram for the instance lifecycle. You don’t need to fully understand everything going on right now, but as you learn and build more, it will be a useful reference.