Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

[Runtime] Component Props #25

Copy link
Copy link
Closed
@ubugeeei

Description

@ubugeeei
Issue body actions

related: #4

Props

I'm going to work on props/emit from now on (I plan to separate them into separate PRs).
Regarding the design, there are already some points that I'm concerned about.
First, let's consider the design of propsOptions.

Based on some comments in previous PRs, I feel that components should be expressed as functions that return Block.
Now, in order to implement props, we need to store the runtime types, default values, and user-defined props definitions somewhere.

Discussion 1

It is likely that the interface will be defined through defineProps for now, but I'm wondering if we are assuming that users will use Props Option in the Options API format.

Discussion 2

How should we store the options information of user-defined props in the component?
Since this is an internal matter, I think it will be stored in ComponentInternalInstance.
The problem is how to store it.
Currently, in the compiler,

export default (props, { expose }) => {
  // .
  // .
  return t0;
}; // satisfies BlockFn

code like this is planned to be outputted. (Currently, the output is represented as setup or render options, but referring to the interface Block in runtime-vapor/render, it seems to be temporary.)

And ComponentInternalInstance is generated in the form of receiving BlockFn as follows:

export function render(
  comp: BlockFn,
  container: string | ParentNode
): ComponentInternalInstance {
  const instance = createComponentInstance(comp);
  // .
  // .
}

So, we need to discuss how to store user-defined props options.


Drafts

  • define internal

    https://github.com/sxzz/vue-simple-props

    // how provide propsOptions? (e.g. default value) 
    export default ({ expose }) => {
      const props = useProps();
      // ...
      return t0;
    };
    export default ({ expose }) => {
      const props = useProps({ p1: { type: String, default: "v" } });
      // ...
      return t0;
    };

    const useProps = (options: PropsOptions) => {
      const i = getCurrentInstance()
      i.propsOptions = option
      // or no use options, and refer to attrs like https://github.com/sxzz/vue-simple-props
    }
  • export internal options

    export default {
      props: { p1: { type: String, default: "v" } },
      blockFn: (props, { expose }) => {
        // ...
        return t0;
      },
    };
    export const props = { p1: { type: String, default: "v" } };
    
    export default (props, { expose }) => {
      // ...
    
      return t0;
    };

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.