Coder Social home page Coder Social logo

Comments (2)

Paratron avatar Paratron commented on May 1, 2024

Usually, IDs are strings, not integers. What you basically demand is, that because you chose to use numeric IDs, the router should handle the conversion for you.

URL parameters are automatically extracted parts of an URL - which is a string. The router should not change that and make any assumptions about your code. The next project breaks because of that change, because they assumed to receive strings instead of numbers.

I would suggest to leave the mechanic as-is and do any conversion on your side; if its even needed.

from wouter.

molefrog avatar molefrog commented on May 1, 2024

I agree with @Paratron, if we decide to convert these parameters automatically, this might create a non-obvious behaviour, when for example the parameter was intended to be a string, but in some rare cases it will be converted to integer.

There was a similar thread in React Router and seems like they have decided to avoid this possible complexity remix-run/react-router#6097. Ideally this can be solved with types, by IMO the design of the library becomes too overloaded.

Even in Rails which was designed to be intuitive and convention-based they don't provide an automatic conversion. What they do instead is following:

def show
  user_id = params[:id] # this is a string

  # but this works fine, since ActiveRecord#find accepts both strings and integers
  user = User.find(user_id)
end

@haggen But if you still want to have this in your project really bad I would suggest overriding a default matcher function like this:

import { Route } from "wouter";
import makeMatcher from "wouter/matcher";

const autoCastIntegers = (objectOrNull) => {
   ...
}

const matcherWithTransformedParams = (transformFn) => {
  const originalMatcher = makeMatcher();

  return (pattern, path) => {
    const [match, params] = originalMatcher(pattern, path);
    return [match, transformFn(params)]
  }
}

<Router matcher={matcherWithTransformedParams(autoCastIntegers)}>
  ...
</Router>

(haven't tested the code)

Thanks for suggesting this feature, but we are likely not going to implement this. Closing the issue.

from wouter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.