Skip to content
This repository was archived by the owner on Sep 1, 2024. It is now read-only.

Output warnings using console.warn#245

Open
guilhermearaujo wants to merge 1 commit into
facebook:mainfrom
guilhermearaujo:master
Open

Output warnings using console.warn#245
guilhermearaujo wants to merge 1 commit into
facebook:mainfrom
guilhermearaujo:master

Conversation

@guilhermearaujo

Copy link
Copy Markdown

Checking the prop types does not change how the program will actually work, and I believe that's why all invalid props are reported with a Warning message.

Yet, these messages are output using console.error, and this log level clearly conflicts with the message idea.

This PR replaces all those calls with console.warn, bringing consistency to the log levels.

@facebook-github-bot

Copy link
Copy Markdown

Thank you for your pull request and welcome to our community. We require contributors to sign our Contributor License Agreement, and we don't seem to have you on file. In order for us to review and merge your code, please sign up at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need the corporate CLA signed.

If you have received this in error or have any questions, please contact us at cla@fb.com. Thanks!

@ljharb

ljharb commented Dec 20, 2018

Copy link
Copy Markdown
Contributor

It should be an error; if PropTypes are invalid, it means you have a bug.

@facebook-github-bot

Copy link
Copy Markdown

Thank you for signing our Contributor License Agreement. We can now accept your code for this (and any) Facebook open source project. Thanks!

@guilhermearaujo

Copy link
Copy Markdown
Author

Then why does the text say Warning? Should it be changed to Error?

@ljharb

ljharb commented Dec 20, 2018

Copy link
Copy Markdown
Contributor

It’s using console.error because it’s an error; i assume it’s saying “warning” because it doesn’t actually stop you from misusing your components.

@guilhermearaujo

Copy link
Copy Markdown
Author

Exactly, it still allow the usage of the components. I agree that an inconsistency in the prop types may end in a potential actual error. But it also may not.

JS is not strongly typed and things can work even when the developer is not very thoughtful about their code correctness (but let's not bring this to the discussion).

My argument is that the checking routine does not affect the code execution. The program will still run as it is intended (read: as the code says to run). If the validation should report an error, it would make more sense, in my opinion, to throw an actual error or exception, interrupting the execution.

If the intention is to "just let the developer know", a warning does look more appropriate, I believe.

@ljharb

ljharb commented Dec 20, 2018

Copy link
Copy Markdown
Contributor

It’s a guaranteed error if explicit PropTypes are invalid - either in the propTypes or in the consumer code. That it still might function correctly by accident doesn’t mean it’s not an error.

console.error is the right place to send this error output.

@eps1lon

eps1lon commented Jan 13, 2019

Copy link
Copy Markdown

It's not an either or answer. Sure if I expect an object in a prop and the user gives me a number then my component will not work as intended hence the error.

However what about e.g. deprecation warnings in prop types? You could argue that this can still be achieved by using console.warn. However propTypes validation has two very important features:

  1. caching
  2. component stack in the message

The first can be implemented in userland. The second not as far as I know. It seems like that it would be more appropriate to open a rfc on the react repo and discuss if propTypes should be able to control the level of logging.

@ljharb

ljharb commented Feb 21, 2019

Copy link
Copy Markdown
Contributor

Closing as a duplicate of #63.

@ljharb ljharb closed this Feb 21, 2019
@eps1lon

eps1lon commented Feb 21, 2019

Copy link
Copy Markdown

@ljharb That PR only downgrades the deprecation warning from console.error to console.warn. This PR downgrades all. If anything #63 should be closed over this one.

@ljharb

ljharb commented Feb 21, 2019

Copy link
Copy Markdown
Contributor

ah. in that case I'll reopen, since it's not a duplicate.

@Gsiete

Gsiete commented Aug 3, 2019

Copy link
Copy Markdown

In the meantime I'm using:

console.error = (function () {
  const { error } = console;

  return function (...args) {
    if (args[0] && args[0].match && args[0].match(/^warn(ing)?:/i)) {
      console.warn(...args);
    } else {
      error.apply(console, args);
    }
  };
}());

One particular case where I don't want to see it as an error is: reactstrap/reactstrap#1596

@asyncanup

Copy link
Copy Markdown

@facebook-github-bot @ljharb can we please get this merged? don't want to fork or work around the issue like @Gsiete did, unless absolutely needed.

@ljharb

ljharb commented Aug 27, 2019

Copy link
Copy Markdown
Contributor

I'm not convinced this is worth it; it'd be a breaking change, and could introduce a lot of code churn in test suites that check for emitted propType errors.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants